shell脚本——判断型脚本
条件语句
test 选项 对象
选项
-e/-a:判断文件是否存在
-d:判断目录是否存在
-r:判断文件是否有读的权限(以实际情况来看)
-w:判断文件是否有写的权限
-x:判断文件是否有执行的权限
# 判断文件是否有对应的权限或是否存在
#echo $? 得到0 表示文件存在或者有对应的权限
#echo $? 得到1 表示文件不存在或没有对应的权限
比较整数数值
[ 整数1 -操作符 整数2 ]
操作符
- -eq:等于
- -ne:不等于
- -gt:大于
- -ge:大于等于
- -lt:小于
- -le:小于等于
字符串比较
=:字符串内容相同
!=:字符串内容不相同,!号表示想反的意思
-z:字符串内容为空
-n:字符是否存在
格式:
[字符串1=字符串2]是否相同
[字符串1!=字符串2]是否不相同
[-z 字符串] 是否为空
[-n 字符串] 字符是否存在
逻辑测试
短路与(且) -a
cmd1 && cmd2
两个值都为真,才为真
cmd1 || cmd2
一个值为真,就是真
例:查看磁盘的健康状态
#!/bin/basd use=`df -h|grep boot|awk '{print $5}'|tr -d %` [ $use -gt 80 ] && echo "磁盘使用过高"|| echo "磁盘使用正常"
#当磁盘使用空间大于80时,会提醒我
拓宽:
( )与 { }
( )会开启子shell
{ } 不会开启子shell
if语句的结构
单分支
if 判断条件 then 条件为真的分支代码 fi 例: if [ 5 gt 4 ] then touch /etc/test echo true fi
双分支
if 判断条件 then 命令语句 else 命令语句 fi 例: ss -natp|grep 80 #过滤 80端口 查看httpd服务是否开启 if [ $? -eq 0 ] #判断httpd 服务是否开启 then echo "httpd服务开启" #开启就显示开启 else systemctl start httpd &>/dev/null #开启httpd服务 if [ $? -eq 0 ] then echo "httpd服务开启" else echo "httpd服务启动失败" fi fi
多分支
if 判断条件1 then 条件1为真的分支代码 elif 判断条件2 then 条件2为真的分支代码 elif 判断条件2 then 条件3为真的分支代码 ...... else 以上条件都为假的分支代码 托底 fi
例:
#!/bin/bash
read -p "请输入你的分数(正整数):" num
if [ $num -ge 90 -a $num -le 100 ]
then
echo "优秀"
elif [ $num -ge 70 -a $num -lt 90 ]
then
echo "良好"
elif [ $num -ge 60 -a $num -lt 70 ]
then
echo "及格"
elif [ $num -lt 60 ]
then
echo "罚抄30编"
else
echo "输入有误,请重新输入0-100之间的正整数"
bash $0
fi
case语句结构
case 变量值 in 模式1) 命令序列1 ;;
模式2)
命令序列2
;;
模式3)
命令序列3
;;
...
*)
默认命令序列
esac
举例:
#!/bin/bash read -p "请输入你的分数:" num case $num in 9[0-9]|100) echo "棒!棒!你真棒!" ;; 7[0-9]|[8][0-9]) echo "不骄不躁,继续努力" ;; 6[0-9]) echo "继续努力,老师相信你们" ;; [0-9]|[1-5][0-9]) echo "退学,刷抖音去吧" ;; *) echo "输入有误" bash $0 ;; esac
实验
脚本一 石头剪刀布
#!/bin/bash # 1 布 2 石头 3 剪刀 read -p "请输入 1布2石头3剪刀:" human m=`echo $[RANDOM%3+1]` if [ $human -eq $m ] then echo "人机 打平" elif [ $human -eq 1 -a $ -eq 2 -o $human -eq 2 -a $m -eq 3 -o $human -eq 3 -a $m -eq 1 ] then echo "你赢了" echo "$m 1布 2石头 3剪刀" echo "$human 1布 2石头 3剪刀" else echo "你输了" echo "$m 1布 2石头 3剪刀" echo "$human 1布 2石头 3剪刀" fi
脚本二 询问(yes or no)
#!/bin/bash read -p "请输入yes 或 no:" key key=`echo $key |tr 'A-Z' 'a-z'` case $key in yes|y) echo "yes" ;; no|n) echo "no" ;; *) echo "输入有误,请重试" ;; esac
#可以单字符,也可以大小写混用
脚本三 工具箱
#!/bin/bash cat <<EOF 1、关闭防火墙 2、显示内存信息 3、显示cpu信息 4、一键安装yum仓库 5、猜拳小游戏 6、分数查询 7、显示计算机的信息 8、退出 EOF read -p "请选择操作(1-7):" num case $num in 1) systemctl stop firewalld bash $0 ;; 2) free -h bash $0 ;; 3) lscpu bash $0 ;; 4) bash /chen/yum.sh bash $0 ;; 5) bash /chen/jsb.sh bash $0 ;; 6) bash /chen/cj.sh bash $0 ;; 7) bash /chen/system.sh bash $0 ;; 8) exit ;; esac
补充:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)