文章目录
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 [ 判断条件 ]
then
if [ 判断条件 ]
then
代码
else
代码
fi
else
代码
fi
2 case 语句
#基本结构#
case 变量名 in
值1)
# 匹配值1时执行的代码块
;;
值2)
# 匹配值2时执行的代码块
;;
值3)
# 匹配值3时执行的代码块
;;
*)
# 不匹配任何值时执行的代码块,类似于default语句
;;
esac
case支持通配符:
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
3 练习
3.1 检查文件是否存在
检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
if [ -e ~/test.sh ]
then
echo "test.sh存在"
if [ -x ~/test.sh ]
then
echo "可以执行"
else
echo "没有执行权限"
fi
else
echo "test.sh不存在"
fi
3.2 整数分组
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。
男生进男生组,女生进女生组,如果输入错误请提示错误。
read -p "请输入100米赛跑的秒数:" a
if [[ "$a" -gt 0 && "$a" -le 10 ]] &> /dev/null
then
echo "恭喜您进入选拔赛!"
read -p "请输入性别:" b
if [ "$b" == 男 ]
then
echo "进入男生组"
elif [ "$b" == 女 ]
then
echo "进入女生组"
else
echo "性别输入错误"
fi
elif [ "$a" -gt 10 ] &> /dev/null
then
echo "抱歉,您已被淘汰"
else
echo "请重新输入"
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
then
if [[ "$a" -ge 0 && "$a" -le 100 ]] &> /dev/null
then
if [[ $(($a%2)) -eq 1 ]]
then
echo $a"是整数,且为奇数"
else
echo $a"是整数,且为偶数"
fi
else
echo $a"超出范围,提示0~100"
fi
else
echo $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 ]
then
echo "主机存活"
echo $a >> /opt/hosts.txt
else
echo "主机不存在"
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
8万+

被折叠的 条评论
为什么被折叠?



