目录
1. 条件测试
shell环境根据命令执行后的返回状态值($?) 来判断是否执行成功,当返回值为0 (真true)时表示成功,返回值为非0值(假false)时表示失败或异常。
test 条件表达式
test 命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立($?返回值为0表示条件成立)
[ 条件表达式 ]
#方括号“["或"]”与条件表达式之间需要至少一个空格进行分隔
1.1 文件测试
格式:
[ 操作符 文件或目录]
- 常用的操作符
操作符 | 说明 |
---|---|
e | 测试目录或文件是否存在(Exist) |
d | 测试是否为目录(Directory) |
f | 测试是否为文件(File) |
r | 测试当前用户是否有权限读取(Read) |
w | 测试当前用户是否有权限写入(Write) |
x | 测试是否设置有可执行(Excute) 权限 |
L | 测试是否为符号链接 |
1.2 整数值比较
格式:
[整数变量1 操作符 整数变量2]
- 常用的操作符
操作符 | 说明 | 符号 |
---|---|---|
eq | 等于 | == |
ne | 不等于 | != |
gt | 大于 | > |
lt | 小于 | < |
le | 小于等于 | <= |
ge | 大于等于 | >= |
1.3 字符串比较
- 格式
[字符串1 = 字符串2 ] 或 [字符串1 == 字符串2]
[字符串1 != 字符串2]
[ -z "字符串"]
#检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
[ -n "字符串”]
#检查是否有字符串存在
请注意:引号的使用,这是防止空格扰乱代码的好方法
1.4 逻辑测试
- 格式
[表达式1] 操作符 [表达式2]
命令1 操作符 命令2
- 常用的操作符
- a或&&:逻辑与,“而且”的意思,前后条件需都成立
- o或|| :逻辑或,“或者"的意思,只需前后条件中一个成立
- ! :逻辑否
2 if语句
- if语句使用fi结尾,和一般语言使用大括号结尾不同。
- [ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格。
- then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要用“;”了。
2.1 if单分支语句
先判断“表达式”的值,如果值为真(非零),则执行“语句”;如果值为假(零),则不执行语句。
- 脚本示例
启动httpd服务
#!/bin/bash
#80端口是否在监听
netstat -nltp | grep :80 &> /dev/null //监听80端口,运行结果放到/dev/null文件
if [ $? -eq 0 ];then //是否监听到,监听到返回0,没有监听到返回非0值
echo "httpd网站服务已在运行"
else
echo "httpd网站服务未运行,正在启动httpd服务....."
rpm -q httpd &> /dev/null //查询是否安装httpd服务
if [ $? -ne 0 ];then
df | /mnt &> /dev/null //看是否挂载
if [ $? -ne 0 ];then // 不能0时,执行挂载
mount /dev/sr0 /mnt &> /dev/null
fi
yum install -y httpd &> /dev/null
fi
systemctl start httpd
if netstat -nltp | grep :80 &> /dev/null;then //监听80端口,运行结果放到/dev/null文件
echo "httpd网站服务启动成功! "
else
echo "httpd网站服务启动失败! !"
fi
fi
复制代码
2.2 if双分支语句
双分支if语句是指由某个条件的两种取值(真或假)构成两个分支,任何时候都会执行其中一个分支,这便形成了“二选一”的结构
- 脚本示例
判断是否是整数
#!/bin/bash
read -p "请输入一个整数:" num
expr $num + 0 &> /dev/null
if [ $? -eq 0 ];then
echo "是整数"
else
echo "不是整数"
复制代码
2.3 if多分支语句
多分支语句就是利用多个条件来选择不同的语句执行得到不同的结果多选1的过程
- 脚本示例
输入分数分出等级
#!/bin/bash
read -p "输入分数:" num //输入提示信息
if [ $num -ge 85 ] && [ $num -le 100 ];then
echo "优秀"
elif [ $num -ge 70 ] && [ $num -le 84 ];then
echo "良好"
elif [ $num -ge 60 ] && [ $num -le 69 ];then
echo "合格"
elif [ $num -ge 0 ] && [ $num -le 59 ];then
echo "不合格"
else
echo "请输入0-100的分数"
fi
复制代码
3. case分支语句
case的分支语句用在 如果里面匹配到固定值;或某个变量存在多中取值,需要对其中的每一个取值分别执行不同的命令序列。
- 脚本示例
输入分数分出等级
#!/bin/bash
read -p "输入分数:" num
case $num in
8[5-9]|9[0-9]|100)
echo "优秀"
;;
7[0-9]|8[0-4])
echo "良好"
;;
6[0-9])
echo "合格"
;;
[0-9]|[0-5][0-9])
echo "不合格"
;;
*)
echo "请输入0-100的数"
esac