shell编程入门
-
什么是shell
- SHELL 就是一个命令解释器
-
shell编程的目的
- 实现自动化操作方式,代替手工的繁琐步骤
-
shell编程的用户
基础配置:系统初始化操作、系统更新、内核调整等等 – 安装程序:自动部署 LNMP、LAMP、MySQL 等等 – 配置变更:Nginx 配置、MySQL 配置、Redis 配置等等 – 业务部署:配合 git、jenkins 等实现自动化持续交付 – 日常备份:脚本对项目或者软件实现全备份或者增量备份等 – 信息采集:硬件、系统、服务、网络等各种数据的自动采集 – 日志分析:获取日志、排序、去重、统计、分析 – 服务扩容:监控服务器就请你信息,脚本程序自动化扩容部署 减少重复工作,周期性工作,降低工作量
-
shell编程的核心
-
批量执行Linux的命令的操作,将手工执行多次的命令,转换到脚本程序通过命令一次性执行
-
脚本基本规范
? 脚本存放在 scripts/目录中 ? 开头添加#!/bin/bash,确定 bash 执行命令 ? 附带作者及版权信息 ? 脚本扩展名为*.sh ? 脚本中尽量不用中文 ? 成对的符号一次书写完成 ? 循环格式一次性输入完成
-
注释和输入输出
注释:除第一行外,以#行注释 输出 read 读取用户输入的信息 -p:打印提示信息 -s:用户输入信息不明文显示 echo:打印信息,类似于python的print()函数 echo -n 打印信息不换行
-
-
执行shell 脚本
mkdir scripts vim test.sh #!/bin/bash echo "hello world" 执行上述脚本 1. bash test.sh 2. sh.test.sh 3. chmod u+x test.sh ./test.sh
-
变量
-
什么是变量:变量时 shell 传递数据的一种方式,作为一个临时存储数据的容器,可以存放 数据并在其他需要的地方直接通过变量名称使用对应的数据。
-
命名规则:
-
? 变量定义时要求字母、数字或者下划线组成,数字不能开头。
-
? 大小写敏感
-
项目规范:见名知意、下划线命名法
vim test2.sh #!/bin/bash name=tom echo "name:$name" echo ‘name:$name‘ echo $name echo ${name}_01 变量赋值,使用“=”符号,将=右边的结果赋值给左边的变量 等号两边不能有空格 定义的变量不要和系统命令冲突
-
-
程序控制结构
顺序结构,选择结构,循环结构
-
1.选择结构
单分支 if 条件;then 条件为True要执行的代码 fi 案例:查看ls命令在文件系统环境变量中的位置,查看返回ok which ls vim 1.sh #!/bin/bash if which ls;then echo ok fi 双分支 if 条件;then 条件为True要执行的代码 else 其他情况 fi 案例:搜索当前用户有没有zhang,找到返回OK,找不到返回error vim 2.sh #!/bin/bash if grep zhang /etc/passwd;then echo "ok" else echo "error" fi 多分支 if [ 条件1 ];then 执行代码1 elif [ 条件2 ];then 执行代码2 elif [ 条件3 ];then 执行代码3 else 其他情况 fi 案例操作:输入1,输出选项1,输入2,输出选项2 vim 3.sh #!/bin/bash read -p "请输入功能选项": choice if [ $choice -eq 1 ];then echo "选项1" elif [ $choice -eq 2 ];then echo "选项2" elif [ $choice -eq 3 ];then echo "选项3" else echo "没有此选项" fi = 判断相关字符是否相等 案例操作,用户输入“Q”退出系统.输入“C”,继续 vim 4.sh #!/bin/bash read -p "是否退出系统?(Q/退出,C/继续)" ret if [ $ret = "Q" ];then echo "退出系统" elif [ $ret = "C" ];then echo "continue" else echo "指令错误" fi
-
case选择结构
case 变量 in 变量 1) 命令序列 1 ;; 变量 2) 命令序列 2 ;; *) 无匹配后命令序列 esac 案例操作:显示功能选项界面,输入序号好功能名称都可以执行 vim 5.sh #!/bin/bash echo "==============" echo " 1.login" echo " 2.register" echo " 3.exit" echo "==============" read -p "请输入功能选项" choice case $choice in 1|login) echo "欢迎登录" ;; 2|register) echo "欢迎注册" ;; 3|exit) echo "退出系统" ;; *) esac
-
-
for 循环
基本操作语法: for 变量名 in [取值列表] do 循环中重复执行的代码 done 案例:检查所有的ip地址通讯 vim 6.sh #!/bin/bash hosts="192.168.1.1 192.168.1.2 192.168.1.3" for h in $hosts do echo "开始检查$h通讯" sleep 1 echo "检查$h通过" done echo "所有ip检查通过"
-
while 循环
while 条件 do 循环要执行的代码 done #案例操作:计算1-100之间的和 vim 7.sh #!/bin/bash num=1 sum=0 while [ $num -le 100 ] do sum=$[ $num + $sum ] let num+=1 done echo 1-100的和是$sum
-
函数的声明和调用
function 函数名称(){ 函数中的代码 } 快捷写法 函数名(){ 函数中的代码 } 案例操作 vim 8.sh #!/bin/bash function func1(){ echo 执行func1函数 } func2(){ echo 执行func2函数 } func1 func2
检查输入的ip地址是否可以ping通
vim 9.sh #!/bin/bash read -p "请输入你要测试的ip地址" IP ping -w1 -c1 $IP>/dev/null #echo $? if [ $? -eq 0 ];then echo "可以正常通信" else echo "不能通信" fi