美文网首页shell
【现学现忘&Shell流程控制】— 41.if语句(1)

【现学现忘&Shell流程控制】— 41.if语句(1)

作者: 繁华似锦Fighting | 来源:发表于2020-10-29 16:01 被阅读0次

    什么是流程控制?

    • 普通理解:Shell编写的程序是顺序执行的,也就是说第一命令先执行,然后接着执行第二条命令,然后再下一条,以此类推,而流程控制就是改变上面这种顺序执行的方式。

    • 官方理解:流程控制语句用于控制程序的流程, 以实现程序的各种结构方式,即用来实现对程序流程的选择、循环、转向和返回等进行控制。

    Shell中的流程控制语句分为:

    • if条件判断语句。
    • case条件判断语句。
    • for循环语句。
    • while循环语句。
    • until循环语句。

    (一)if条件判断语句

    1、单分支if条件语句

    单分支条件语句最为简单,就是只有一个判断条件,如果符合条件则执行某个程序,否则什么事情都不做。

    语法如下:

    if[ 条件判断式 ];then
        程序
    fi
    

    单分支条件语句需要注意几个点:

    • if语句使用fi结尾,和一般语言使用大括号结尾不同。

    • [ 条件判断式 ]就是使用test命令进行判断,所以中括号和条件判断式之间必须有空格。

    • then后面跟符合条件之后执行的程序,可以放在[ ]之后,用;分割。

      也可以换行写入,就不需要;了,

      比如单分支if语句还可以这样写:

      if[ 条件判断式 ]
          then
              程序
      fi
      

    示例:

    需求:根分区使用率超过80%则报警。

    # 1.获取根分区使用率
    # 1.1 通过df命令查看Linux系统上的文件系统磁盘使用情况。
    #   df命令用于显示目前在Linux系统上文件系统磁盘使用情况的统计。
    [root@localhost tmp]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        19G  2.1G   16G  12% /
    tmpfs           491M     0  491M   0% /dev/shm
    /dev/sda1       240M   34M  194M  15% /boot
    
    # 1.2 把根分区的磁盘使用情况提取出来
    [root@localhost tmp]# df -h | grep /dev/sda3
    /dev/sda3        19G  2.1G   16G  12%  /
    
    # 1.3 然后用awk命令,进行列信息提取,提取第五列。
    [root@localhost tmp]# df -h | grep /dev/sda3 | awk '{print $5}'
    12%
    
    # 1.4 截取前面的数字部分,方便后边判断使用。
    #   以%作为分隔符,然后提取1列。
    [root@localhost tmp]# df -h | grep /dev/sda3 | awk '{print $5}' | cut -d "%" -f 1
    12
    
    # 2.编写Shell程序
    # 2.1 创建一个Shell文件if1.sh
    [root@localhost tmp]# vim if1.sh
    
    # 编写内容如下:
    
    #!/bin/bash
    
    # 把根分区使用率作为变量值赋予变量rate
    # 把上面的命令以命令行的方式先敲一遍,确认能获取到我们需要的内容。
    # 如果在Shell里面直接写,会有很大难度。
    rate=$( df -h | grep /dev/sda3 | awk '{print $5}' | cut -d "%" -f 1 )
    
    # 判断rate的值如果大于等于80,则执行then后的程序。
    # 我们这里为了有演示效果,把输出调整为10.
    if [ $rate -ge 10 ]
            then
                    # 打印警告信息。在实际工作中,也可以向管理员发送邮件。
                    echo "Warning! /dev/sda3 is full !!!"
    
    fi
    
    
    # 上面的程序表示,如果根分区使用率超过80%则打印`Warning! /dev/sda3 is full !!!``,没有则什么都不做。
    
    
    
    # 3. 给if1.sh文件赋予执行权限,并执行该脚本。
    [root@localhost tmp]# chmod 755 if1.sh 
    [root@localhost tmp]# ./if1.sh 
    Warning! /dev/sda3 is full !!!
    
    

    相关文章

      网友评论

        本文标题:【现学现忘&Shell流程控制】— 41.if语句(1)

        本文链接:https://www.haomeiwen.com/subject/awakvktx.html