shell脚本——判断型脚本

发布时间 2023-11-21 19:13:56作者: 打开方式不对

条件语句

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

两个值都为真,才为真

一假即为假

短路或  -o

一真即为真

cmd1 || cmd2

一个值为真,就是真

全假即为假

标准格式:

cmd1 &&  cmd2  ||  cmd3

例:查看磁盘的健康状态
#!/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
# 12 石头  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

 #可以单字符,也可以大小写混用

脚本三 工具箱

工具箱

 

 

 

补充: