Shell脚本 - 条件判断 | if else语句结构 | case语句结构 | 超详细

一、条件测试

test 条件表达式

举例格式①:

  • test 1 == 1

测试 1 是否等于 1 返回值 0 即为true

举例格式②:

  • [ 1 == 1 ]

二、文件测试

[ 操作符 文件或目录 ]

常用的测试操作符

  • -d 测试是否为目录或者是否存在
  • -e 测试文件或目录是否存在
  • -f 测试是否为文件
  • -r 测试当前用户是否有权限读取
  • -w 测试当前用户是否有权限写入
  • -x 测试当前用户是否有权限执行
[ 操作符 文件或目录 ] && echo "YES"

举例:

  • [ -e a ] & echo “target found”

三、整数值比较

[ 整数1 操作符 整数2 ]

常用的测试测操作符

扫描二维码关注公众号,回复: 12669111 查看本文章
  • -eq 等于
  • -ne 不等于
  • -gt 大于
  • -lt 小于
  • -le 小于或等于
  • -ge 大于或等于

举例:

[ `who | wc-l` -gt 5 ] && echo "没有超额"


举例:简单的定期巡检

a=`free -m | grep "Mem" | awk '{print $4}'`
[ $a -lt 100 ] && echo "剩余"${a}MB
if [ $a -lt 100 ]
then reboot fi;

四、字符串比较

常用的测试操作符

  • = 字符串内容相同
  • != 字符串内容不同,!号表示相反的意思
  • -z 字符串内容为空
  • n 字符串有内容
[ str1 = str2 ]

= 和 == 功能相同

[ str1 != str2 ]变量中的字符串是否不相同
[ -z str1 ] 检查字符串内容为空

空格也是字符串

[ -n str1 ] 检查是否有字符串

变量不加双引号的话就会被当成单纯的字符串去判断

举例:

[ $PWD = `pwd` ] && echo "The current directory is `pwd`"


举例:

[ "en_US" != $LANG ] && echo "not en_US"

五、逻辑测试

[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2

常用的测试操作符

  • -a 或 && :逻辑与,而且的意思
  • -o 或 || :逻辑或,或者的意思
  • ! :逻辑否
[ $a -ne 1 ] && [ $a != 2 ] 等同于 [ $a -ne 1 -a $a != 2 ]

举例:

  • echo [ “1” == “1” ] && echo “true” || echo “yes”

只要一个成立就不会执行下一个

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

举例:使用PING判断网站是否存货

  • -c:发送包的个数
  • -i:发送包的时间间隔
  • -w:多少秒停止
ping -c 3 -i 0.5 -w 2 baidu.com > /dev/null && echo "$1 online" || echo "$1 off"
ping -c 3 -i 0.5 -w 2 example.com > /dev/null && echo "$1 online" || echo "$1 off"


举例:多次判断:

[ -d /boot ] && [ -r /boot ] && echo "you can read"

六、判断语句

if 语句

条件为 true 时执行 then 后面的部分就会被执行
判断的最后必须加上 fi 来进行闭合

if  condition
then
    statement1
fi

举例:
(()) 是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,以及与、或、非逻辑运算

#!/bin/bash
if ((10 > 1))
then
    echo "true"
fi

if else 语句

如果 conditiontrue ,将执行 statement1 ,如为 false ,将会执行 statement2

if condition
then
   statement1
else
   statement2
fi

举例:

#!/bin/bash
read input_1
read input_2
if (( $input_1 == $input_2 ))
then
    echo "${input_1}=${inut_2}"
else
    echo "${input_1}!=${input_2}"
fi

if elif else 语句

condition1true 时,将执行 statement1 ,接下来将判断 condition2 ,如果为 true 将执行 statement2 ,如果从一开始 condition1 就为 false 时 将执行 else 后的语句 statementn3

if  condition1
then
   statement1
elif condition2
then
    statement2
else
   statementn3
fi

举例:

#!/bin/bash
if ((10 > 1))
then
      echo "1"
elif ((2 > 1))
then
      echo "2"
else
      echo "3"
fi

case in语句

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

case 变量值 in
判断1)
命令序列
;;
判断2)
命令序列
;;
……
*)
默认命令序列
esac

举例:

read num -p "请输入数字:"
case $num in
    1)
        echo "1"
        ;;
    2)
        echo "2"
        ;;
    *)
        echo "error"
esac

猜你喜欢

转载自blog.csdn.net/qq_42427971/article/details/114355627