文章目录
- if 语句 和 case 语句
- 1 if 语句
- 1.1 条件测试
- 1.1.1 test表达式
- 1.1.2 [ ] 和 [[ ]]
- 1.2 单分支结构
- 1.3 多分支结构
- 1.4 嵌套结构
- 2 case 语句
- 3 练习
- 3.1 检查文件是否存在
- 3.2 整数分组
- 3.3 用 case语句解压不同后缀名压缩包
- 3.4 整数奇偶判断
- 3.5 if 语句 判断主机是否存活
- 3.6 case 语句控制nginx服务
if 语句 和 case 语句
1 if 语句
1.1 条件测试
先设定一个条件,判断条件是否满足,执行一段特定的代码。
不满足,执行不满足的代码。
通过 $?
的返回码来判断条件为真还是为假( true 或 false )
条件测试的格式:
1.1.1 test表达式
test 表达式-e 判断文件(目录)是否存在-d 判断目录是否存在-f 判断文件是否存在-r 判断当前用户是否有读权限-w 判断当前用户是否有写权限-x 判断当前用户是否有执行权限
整数比较 | 选项 | 符号 |
---|---|---|
等于 | -eq | == (比较数字和字符串) |
不等于 | -ne | != (比较数字和字符串) |
大于 | -gt | > |
小于 | -lt | < |
小于等于 | -le | <= |
大于等于 | -ge | >= |
1.1.2 [ ] 和 [[ ]]
[ ]
和 [[ ]]
是bash自带的。
逻辑测试:
且(-a、&&):表达式中的所有条件都必须成立
或(-o、||):只要表达式中有一个条件成立即可
[[ ]]
:双中括号的功能更强大,适用于复杂的表达式,可以避免歧义。
[ ]
:功能比较适用于简单的条件判断。
1.2 单分支结构
#单分支格式#if [ 判断条件 ]
then 代码
else代码
fi
1.3 多分支结构
#多分支格式#if [ 判断条件 ]
then 代码
elif [ ] # 可以无限elif
then代码
else # 以上条件都为假代码
fi
# if 和 fi要对应
1.4 嵌套结构
# if 语句嵌套格式if [ 判断条件 ]
thenif [ 判断条件 ]then代码else代码fi
else代码
fi
2 case 语句
#基本结构#
case 变量名 in值1)# 匹配值1时执行的代码块;;值2)# 匹配值2时执行的代码块;;值3)# 匹配值3时执行的代码块;;*)# 不匹配任何值时执行的代码块,类似于default语句;;
esaccase支持通配符:
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
3 练习
3.1 检查文件是否存在
检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
if [ -e ~/test.sh ]
thenecho "test.sh存在"if [ -x ~/test.sh ]thenecho "可以执行"elseecho "没有执行权限"fi
elseecho "test.sh不存在"
fi
3.2 整数分组
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。
男生进男生组,女生进女生组,如果输入错误请提示错误。
read -p "请输入100米赛跑的秒数:" a
if [[ "$a" -gt 0 && "$a" -le 10 ]] &> /dev/null
thenecho "恭喜您进入选拔赛!"read -p "请输入性别:" bif [ "$b" == 男 ]thenecho "进入男生组"elif [ "$b" == 女 ]thenecho "进入女生组"elseecho "性别输入错误"fi
elif [ "$a" -gt 10 ] &> /dev/nullthenecho "抱歉,您已被淘汰"
elseecho "请重新输入"
fi
3.3 用 case语句解压不同后缀名压缩包
用 case 语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
tar -zxvf
tar -jxvf
read -p "请输入压缩包文件名:" a
case $a in
*.tar.gz)tar -zxvf $a -C /opt;;
*.tar.bz2)tar -jxvf $a -C /opt;;
*)echo "压缩包文件后缀名不正确"
esac
3.4 整数奇偶判断
提示用户输入内容,使用 if 语句判断输入的内容是否为整数。判断范围0-100。再判断输入的内容是奇数还是偶数。
read -p "请输入内容:" a
if [ "$a" -eq "$a" ] &> /dev/null
thenif [[ "$a" -ge 0 && "$a" -le 100 ]] &> /dev/nullthenif [[ $(($a%2)) -eq 1 ]]thenecho $a"是整数,且为奇数"elseecho $a"是整数,且为偶数"fielseecho $a"超出范围,提示0~100"fi
elseecho $a"不是整数"
fi
3.5 if 语句 判断主机是否存活
用 if 语句判断主机是否存活,保存到/opt/hosts.txt
ping -c 5 不显示ping的过程
read -p "请输入主机IP地址:" a
ping -c 5 $a &> /dev/dull
if [ $? = 0 ]
thenecho "主机存活"echo $a >> /opt/hosts.txt
elseecho "主机不存在"
fi
3.6 case 语句控制nginx服务
用 case 语句控制 systemctl start|stop|restart|status 来管理nginx服务,
要求如果命令选项不对,则提示输入不正确: {start|stop|status|restart}
apt -y install nginx &> /dev/null
read -p "请输入命令选项:" a
case $a in
start)systemctl start nginx;;
stop)systemctl stop nginx;;
restart)systemctl restart nginx;;
status)systemctl status nginx;;
*)echo "命令选项输入不正确"
esac