Linux 条件测试 | if语句结构 | case 语句结构| 超详细

条件测试

➤test命令

测试表达式是否成立,若不成立返回0,否则返回非0数值
格式1:test 条件表达式
在这里插入图片描述
格式2:[ 条件表达式 ]
在这里插入图片描述
或者 :

`echo "$(test 11 == 11 )"$?`

在这里插入图片描述

echo " `test 14 == 13 `"$?

在这里插入图片描述

➤文件测试

[ 操作符 文件或目录 ]
在这里插入图片描述
或者

[ -d /opt ] && echo &?
[ -f /opt ] || echo &?

在这里插入图片描述
常用的测试操作符

参数说明
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)

➤整数值比较

[ 整数1 操作数 整数2 ]
在这里插入图片描述
在这里插入图片描述

[ $(ps aux | wc -l) -gt 5 ] && echo "进程数为: $(ps aux | wc -l)"

在这里插入图片描述

[ $(who | wc -l) -le 5 ] && echo "用户数为:$(who | wc -l)"

在这里插入图片描述

free=`free -m | grep "Mem:" | awk '{print $4}'`
[ $free -lt 1024 ] && echo "剩余内存空间:${free}M"

在这里插入图片描述
常用的测试操作符

参数说明
-eq等于(Equal)
-ne不等于(Not Equal)
-lt小于(Leser Than)
-gt大于(Greater Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

扩展:传递参数:xargs
find ./ -name “*.txt” | xargs rm -rf
在这里插入图片描述

➤字符串比较

格式1 :[ 字符串1 = 字符串2 ]

[ $PWD = $(pwd) ] && echo "当前路径为:`pwd`"

在这里插入图片描述

[ 字符串1 != 字符串2 ]

[ $LANG != "en.us" ] && echo "not en.us"在这里插入图片描述

格式2 [ -z 字符串 ]
在这里插入图片描述

read -p "是否覆盖文件(y/n):" ACK
[ $ACK = "y" ] && echo "覆盖"

在这里插入图片描述

常用的测试操作符

参数说明
=字符串内容相同
!=字符串内容不同,!号表示相反的意思
-z字符串内容为空
- n字符串有内容

➤逻辑测试

格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
常用的测试操作符

参数说明
-a或&&逻辑与,而且的意思
-o或逻辑或,或者的意思
逻辑否
a=5
echo "`[ $a -ne 1 ] && [ $a != 2 ]`"$?
echo "`[ $a -eq 1 ] && [ $a != 2 ]`"$?

在这里插入图片描述
或者

echo "`[ $a -eq 1 -a $a != 2 ]`"$?
echo "`[ $a -ne 1 -a $a != 2 ]`"$?

在这里插入图片描述
或者

 echo "`[[ $a -ne 1 && $a != 2 ]]`"$?
 echo "`[[ $a -eq 1 && $a != 2 ]]`"$?

在这里插入图片描述
注意:&&、||操作符能够正常存在[[ ]]条件判断结构中,但是如果出现在一个[ ]结构中,就会报错

ping -c 3 -i 0.5 -w 2 192.168.1.8 > /dev/null && echo "$1 online" || echo "$1 off"
ping -c 3 -i 0.5 -w 2 192.168.1.100 > /dev/null && echo "$1 online" || echo "$1 off"

例:
-c:发送包的个数
-i:发送包的时间间隔
-w:多少秒停止

[ 2 -ne 3 ] && echo "true" || echo "false"
[ 4 -le 3 ] && echo "true" || echo "false"

在这里插入图片描述
注意: “&& ||” 同时存在时,当" &&" 前的命令判断成立时,“||”执行前面的语句,否则,当" &&" 前的命令判断不成立时,“||”执行后面的语句

 [ -f /sys ] && [ -x /mnt ] && echo "you can open it"
 [ -r /opt ] && [ -x /mnt ] && echo "you can open it"

在这里插入图片描述

[ -r /opt ] || [ -x /mnt ] && echo "you can open it"

在这里插入图片描述

if语句的结构

➤单分支结构

if 条件测试操作
then 命令序列
fi
在这里插入图片描述
例:

if [ 3 -gt 2 ]
then 
   echo "正确"
fi

在这里插入图片描述
也可以写:

if [3 -gt 2 ];tnen echo "right" ; fi  

或者

[ 3 -gt 2 ]  && echo "right"

在这里插入图片描述
在这里插入图片描述
例:

#!/bin/bash
MOUNT_DIR="/opt/dd"
if [ ! -d $MOUNT_DIR ]
then
  mkdir -p $MOUNT_DIR
fi

在这里插入图片描述

➤双分支结构

if 条件测试操作
then
命令序列 1
else
命令序列 2
fi
在这里插入图片描述
例:

#!/bin/bash
a= $(netstat -natp | grep ":80")
if [  "$a" = 0 ]
then
   echo "httpd服务正在运行中"
else
   echo "httpd 服务未运行,请启动服务"
fi 

➤多分支结构

if 条件测试操作
then
命令序列1
elif
条件测试操作2
then
命令序列2
else
命令序列3
fi
在这里插入图片描述
例:

#!/bin/bash
read -p "请输入你的分数:" score
if [ 80 -lt $score -a $score -le 100 ]
then
  echo " 你的分数为:${score},优秀!!!"
elif [ 60 -le $score -a $score -le 80 ]
then
  echo " 你的分数为:${score},合格!!!"
elif [ 0 -le $score -a $score -lt 60 ]
then
  echo "你的分数为:${score},不合格!!!"
else
  echo " 你的分数无效,重新输入!!!"

fi

在这里插入图片描述
在这里插入图片描述

case语句的结构

➤case多分枝结构

case多分枝结构
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
……
*)
默认命令序列
esac
在这里插入图片描述

在这里插入图片描述

➤case语句注意事项

➤case行首必须以单词“in”,每一模式必须以单个右括号")“结束
➤双分号”;;“表示命令序列的结束
➤模式字符串中,可以用方括号表示一个连续的范围,如”[0-9]";还可以使用竖杠|表示或,比如a|b
➤*)表示默认模式,其中的*相当于通配符
例:

#!/bin/bash
read -p "请输入你的分数:" score
[ 80 -lt $score -a $score -le 100 ] && a="great"
[ 60 -le $score -a $score -le 80 ] && a="good"
[ 0 -le $score -a $score -lt 60 ] && a="false"
case $a in
great)
  echo " 你的分数为:${score},优秀!!!"
;;
good)
  echo " 你的分数为:${score},合格!!!"
;;
false)

  echo "你的分数为:${score},不合格!!!"
;;
*)

  echo " 你的分数无效,重新输入!!!"

esac

在这里插入图片描述

正则表达式的写法:
#!/bin/bash
read -p "请输入你的分数:" score

case $score in
8[0-9]|9[0-9]|100)
  echo " 你的分数为:${score},优秀!!!"
;;
6[0-9]|7[0-9])
  echo " 你的分数为:${score},合格!!!"
;;
[0-9]|[1-5][0-9])

  echo "你的分数为:${score},不合格!!!"
;;

*)
  echo " 你的分数无效,重新输入!!!"

esac

在这里插入图片描述

拓展 :如何获取cpu负荷占比值

top -b -n 1 | grep "%Cpu" | awk '{print $8}'

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值