shell脚本的条件语句

脚本中的条件语句的意义:

        当你写完一个脚本如果没有相应的控制语句,那么执行结果的成功与否往往无法判断;再比如当一个脚本执行过程中会出现多种情况,或者执行成功了该怎么做,执行失败了又该怎么做,这需要去做一个控制。让你的脚本具备一定的智能,这是添加脚本条件的意义。

前提准备

        当你准备进行控制的时候,你首先得有个判断得方法,并且时脚本自己能够判断,幸好Linux为我们准备了判断方式:

命令行模式:如果不在脚本中有test命令可以进行判断。

  • test 选项 参数

    • -d:是否为目录

    • -f:是否是文件

    • -e:文件是否存在

    • -rwx:当前用户是否有具有相应的权限

脚本模式:如果还用上述方式,对于书写来说会将结构变得更加复杂。因此有更加清晰的写法“[ ]” .

  • [ 选项 参数 ]

  • 注意“[ ]”前后要有空格

了解了如何去判断,那么就需要判断的对象都有哪些:一般常用的分为:整数值比较,字符串比较,逻辑测试。

  • 整数值比较

    • a=b -eq 》》 a -eq b

      • 等于

    • a!=b -ne 》》 a -ne b

      • 不等于

    • a>b -gt 》》 a -gt b

      • 大于

    • a

      • 小于

    • a>=b -ge 》》 a -ge b

      • 大于等于

    • a<=b -le 》》 a -le b

      • 小于等于

 字符串比较:

  • 字符串比较

    • 等于

      • “=”   前面等于后面

    • 不等于

      • “!=”  前面不等于后面

    • -z

      • 字符串是否为空

逻辑测试:

  • 逻辑测试

    • &&(逻辑与)前后条件都要满足,

    • || (逻辑或)前后条件满足其一即可,二执其一,

    • !(逻辑否)不满足条件时返回值才是0

返回值:在Linux系统中$?可以返回上一条命令执行结果的状态值, 0表示正常执行,非0表示执行结果有问题。

了解完毕之后就可以进行简单的脚本编写了。

最常用的,用的最多的if语句

先来了解以下if语句使用频次最高的条件语句:其按照分支的多少可以分为:单分支if语句,双分支if语句,多分支if语句。

  • if语句

    • 存在多个条件分别去判断

    • 如果。。那么。。

      • if 。。then。。

    • 单分支if语句

      • 基本结构

        • if 条件测试操作

        • then 命令序列

        • fi

        • #!/bin/bash    声明解释器
          if [ "$USER" != "root" ]  if语句条件测试
          then
          echo "错误!非 root 用户,权限不足!" 
          exit 1     退出时返回状态值
          fi      if语句结束

    • 双分支if语句

      • 基本结构

        • if 条件测试操作

        • then 命令序列

        • else 命令序列

        • fi

        • 例:

          #!/bin/bash    声明解释器
          ping -c 3 -i 0.2 -W 3 $1 &>/dev/null   将ping的信息重定向到黑洞文件,不在屏幕上显示
          if [ $? -eq 0 ]    if语句的条件测试
          then                         满足则
              echo "Host $1 is up."
          else                         不满足则
              echo "Host $1 is down."
          fi                if语句结束标识

    • 多分支if语句

      • 基本结构

        • if 条件测试操作

        • then 命令序列

        • elif 条件测试语句

        • then

        • 命令序列

        • elif 条件测试语句

        • then

        • 命令序列

        • 。。。

        • else 命令序列

        • fi

        • 例如将成绩分层:

        • #!/bin/bash    声明解释器
          read -p "请输入您的分数(0-100): " GRADE    定义用户输入的数字为变量GRADE
          if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]     分支一
          then
              echo "$GRADE 分,优秀!"
          
          elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]   分支二
              then
              echo "$GRADE 分,合格!" 
          
          else                                    分支三
              echo "$GRADE 分,不合格!"
              fi

当需要的分支越多那么需要书写的if多分支语句也就更为复杂,这对于脚本编写和运行来说是极不友好的。好在还有case语句可以帮助我们。

  • case(情况)语句

    • 适用场景:存在一个变量但是变量值不固定。

    • 优点结构更加清晰, 适用场景:某个变量存在多种取值,需要对某一部分取值单独执行不同的命令。

    • 语句结构

      • case 变量值 in

      • 模式1) 命令序列

      • ;;

      • 模式2)

      • 命令序列 ;;

      • 。。。

      • *)

      • 默认命令序列

      • esac

      • 注意事项:

        •  case 行尾必须为单词“in”,每一模式必须以右括号“)”结束。

        • 双分号“;;”表示命令序列的结束。

        • 模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号,

        • 最后的“*)”表示默认模式,其中的*相当于通配符。当以上所有模式都不匹配则执行该模式的命令。

        • 例:

        • read -p "请输入一个字符,并按 Enter 键确认:" KEY
          case "$KEY" in
          
          [a-z]|[A-Z])     匹配任意字母
              echo "您输入的是 字母."
          ;;
          
          [0-9])         匹配任意数字
              echo "您输入的是 数字."
          
          ;;
          
          *)         匹配任意除以上两种模式以外的字符。
              echo "您输入的是 空格、功能键或其它特殊字符."
          esac

以上呢,就是关于常用的两种条件语句,以及它们的应用,在实际书写过程中需要灵活的使用,以此来达到控制脚本的目的 ,

如果有任何疑问欢迎留言,看到会及时回复。

你可能感兴趣的:(linux,运维)