zoukankan      html  css  js  c++  java
  • shell脚本中的if条件语句介绍和使用案例

    #前言:在生产工作中if条件语句是最常使用的,如使用来判断服务状态,监控服务器的CPU,内存,磁盘等操作,所以我们需要熟悉和掌握if条件语句。

     简介

    if条件语句,简单来说就是:如果,那么。有if单分支结构,双分支结构,多分支结构

    1.单分支结构

    #语法结构:

    if <条件表达式>
        then
            指令
    fi

    if <条件表达式>;then
      指令
    fi

    if <条件表达式>
      then
        if <条件表达式>
          then
        fi
    fi

    #简单记忆法:

    如果 <你给我足够多的钱>
      那么
        我就给你干活
    果如

    #说明:<条件表达式> 可以是test、[]、[[]]、(())等条件表达式,每一个if条件语句都是以if开头,并带有then,最后以fi结尾

    #例子:

    [root@shell scripts]# cat if.sh 
    #!/bin/bash
    
    if [ -f /etc/hosts ]
        then
          echo "[guoke1]"
    fi
    
    if [[ -f /etc/hosts ]];then
        echo "[[guoke2]]"
    fi
    
    if test -f /etc/hosts
        then
          echo "guoke3"
    fi
    #说明:上面都是判断/etc/hosts是否是文件并是否存在,如果是文件并且存在就打印相关的命令

    #执行效果:

    [root@shell scripts]# sh if.sh 
    [guoke1]
    [[guoke2]]
    guoke3

    #说明:因为/etc/hosts是一个文件并且存在,所以输出后面的相关命令

    2.双分支结构:加一个else否则

    #if单分支结构主体是:如果....那么....。而双分支结构就是:如果....那么.....否则

    #语法结构

    if <条件表达式>
        then
            命令集1
        else
            命令集2
    fi
    
    #简单记忆
    如果 <你给我足够多的钱>
      那么
        我就给你干活
      否则
        我再考虑一下
    果如

    #例子:

    [root@shell scripts]# cat if1.sh 
    #!/bin/bash
    
    if [ -f /etc/hosts ]
        then
          echo "is file"
        else
          echo "no file"
    fi
    
    if [ -f /etc/test ]
        then
          echo "is file"
        else
          echo "no file"
    fi

    #执行效果

    [root@shell scripts]# sh if1.sh 
    is file
    no file

    #说明:因为/etc/test这个文件不存在,所以输出no file

    3.多分支结构

    #多分支的主体为,"如果.....,那么.....,或者如果......,那么,否则....."

    #语法结构

    if <条件表达式1>
        then
            指令集1
        elif <条件表达式2>
            then
                指令集2
        else
            指令集3
    fi

    #写多个elif

    if <条件表达式1>
        then
            指令集1
        elif <条件表达式2>
            then
                指令集2
        elif <条件表达式3> 
            then
                指令集3     
        else
            指令集4
    fi

    #提示:如果加elif,那么就要加then,每个elif都要带有then,最后结尾的else后面没有then

    #简单记忆

    如果 <你有房>
        那么
            我就嫁给你
        或者如果 <你家里有钱>
            那么
                我也可以嫁给你
        或者如果 <你很努力很吃苦>
            那么
              我们可以先谈谈男女朋友
        否则
            我们没戏
    果如

    #简单例子:

    [root@shell scripts]# cat if2.sh 
    #!/bin/bash
    
    if [ $1 -eq 1 ]
        then
          echo "input 1 success"
        elif [ $1 -eq 2 ]
          then
              echo "input 2 success "
        elif [ $1 -eq 3 ]
          then
              echo "input 3 success"
        else
          echo "input failure"
    fi

    #说明:如果传入的第一个参数为1就输出相关命令,或者有如果传入的第一个参数为2,就输出相关命令,后面同理,最后是否则又输出什么

    #执行效果

    [root@shell scripts]# sh if2.sh 1
    input 1 success
    [root@shell scripts]# sh if2.sh 2
    input 2 success 
    [root@shell scripts]# sh if2.sh 3
    input 3 success
    [root@shell scripts]# sh if2.sh 4
    input failure

    4.if条件语句的使用案例

    4.1.检查软件包是否安装

    #检查sysstat包是否安装

    [root@shell scripts]# cat soft_package.sh 
    #!/bin/bash
    
    if rpm -q sysstat &>/dev/null
        then
          echo "sysstat is already installed."
        else
          echo "sysstat is not installed."
    fi

    #说明:使用if判断sysstat包有没有安装,如果安装了就打印already installed已经安装,如果没有安装就打印not installed没有安装

    #执行效果

    [root@shell scripts]# sh soft_package.sh 
    sysstat is already installed.

    #检查mailx包是否安装

    [root@shell scripts]# cat soft_package.sh 
    #!/bin/bash
    
    if rpm -q mailx &>/dev/null;then
        echo "mailx is already installed."
    else
        echo "mailx is not installed."
    fi

    #说明:使用if判断mailx包有没有安装,如果安装了就打印already installed已经安装,如果没有安装就打印not installed没有安装

    #执行效果

    [root@shell scripts]# sh soft_package.sh 
    mailx is not installed.

    4.2.监控httpd服务

    #提示:使用netstat或ss过滤然后使用wc统计,进行判断,如果结果大于0,就表示运行,否则就发邮件报警然后启动服务

    [root@shell scripts]# cat web.sh 
    #!/bin/bash
    
    if [ `netstat -untpl | grep httpd | wc -l` -gt 0 ];then
        echo "httpd is Running"
    else
        echo "httpd service down" | mail -s "httpd" 1075792988@qq.com
        systemctl restart httpd
    fi

    4.3.监控mysql服务

    [root@shell scripts]# cat mysql_mon.sh 
    #!/bin/bash
    
    if [ `netstat -untpl | grep mysqld | wc -l` -gt 0 ];then
        echo "mysqld is Running"
    else
        echo "mysqld service down" | mail -s "mysqld" 1075792988@qq.com
        systemctl restart mysqld
    fi

    #然后将写的监控脚本放进定时任务里面,多久运行一次检查

    #例如:每3分钟执行一遍

    */3 * * * * root /bin/sh /scripts/web.sh &>/dev/null
    */3 * * * * root /bin/sh /scripts/mysql_mon.sh &>/dev/null

    #提示:对于开发程序脚本来说,我们一般是先要明白开发需求,然后进行分析,设计思路,然后再编写代码

    #例如:监控系统剩余内存的大小,如果小于200M,就邮件报警,每3分钟执行一次

    思路:
    1.先在命令行获取到系统剩余的内存的值
    2.配置邮件报警功能
    3.进行判断,如果取到的值小于200M,就报警
    4.编写shell脚本
    5.加入crond定时任务,然后每3分钟检查一次

    #总结:if条件语句可以做的事情还有很多,大家可以根据工作需求去多多开发挖掘,下篇将继续写shell脚本的另外一个条件语句case。好了,到这里又要说再见了,写的不好地方还望指出,多多交流提高,下次再会。

  • 相关阅读:
    Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
    一份完整的 Java 成神路线图,值得收藏!
    12 岁开始学编程,17 岁总结了 7 个重要教训!
    想成为顶尖 Java 程序员?先过了下面这些问题!
    Dubbo面试20问!这些题你都遇到过吗?
    yum安装出现No package crontabs available解决办法
    表结构设计方法
    后端token认证模板
    vue 用户登录 路由拦截 vuex cookie
    pyharm无法安装包的问题
  • 原文地址:https://www.cnblogs.com/guoke-boy/p/12593565.html
Copyright © 2011-2022 走看看