• shell学习之路:流程控制(if)


    1.单分支if条件语句

    1 if [ 条件判断式 ];then
    2     程序
    3 fi
    4 或者
    5 if [ 条件判断式 ]
    6     then
    7         程序
    8 fi

    注意事项:

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

    2.[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格 前后都要有

    3.then后面跟符合条件之后执行的程序,可以放在[]之后,用";"分号分割。也可以换行写入,就不需要";"了

    例如:判断分区使用率

    脚本说明: 我的根分区是/dev/sdb5 我将 df -h 中的第五列的百分数字部分提取出来

    赋给$rate 在用if判断比较结果是否大于80 大于则成立 不大于则不成立 成立则输出警告 不成立则不执行任何

    当然我也可以将警告替换成其他 例如email信息或者触发另一个警告脚本以及将警告信息生成日志等等!

    #!/bin/bash
    #统计根分区使用率
    #Author: pat (Email:239@qq.com)
    
    rate=$(df -h | grep "/dev/sda5" | awk '{printf $5"
    "}' | cut -d "%" -f 1)
    #把根分区使用率作为变量值赋予变量rate
    
    if [ $rate -ge 80 ]
        then
            echo "WARNING! /dev/sda5 is full!!"
    fi

    2.双分支if条件语句

    1 if [ 条件判断式 ]
    2     then
    3         条件成立时,执行的程序
    4     else
    5         条件不成立时,执行的程序
    6 fi

    例如1:备份mysql数据库

     1 #!/bin/bash
     2 #备份mysql数据库
     3 ntpdate asia.pool.ntp.org $>/dev/null
     4 #同步系统时间
     5 date=$(date +%y%m%d)
     6 #把当前系统时间的年月日格式赋予变量date
     7 size=$(du -sh /var/lib/mysql)
     8 #统计mysql数据库文件的大小,并把大小赋给变量size
     9 if [ -d /tmp/dbbak ]
    10     then
    11         echo "Date : $date!" > /tmp/dbbak/dbinfo.txt
    12         echo "Data size : $size" >> /tmp/dbbak/dbinfo.txt
    13         cd /tmp/dbbak
    14         tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
    15         rm -rf /tmp/dbbak/dbinfo.txt
    16     else
    17         mkdir /tmp/dbbak
    18         echo "Date : $date!" > /tmp/dbbak/dbinfo.txt
    19         echo "Data size : $size" >> /tmp/dbbak/dbinfo.txt
    20         cd /tmp/dbbak
    21         tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
    22         rm -rf /tmp/dbbak/dbinfo.txt
    23 fi

    示例二:判断apache是否启动:

    需要安装nmap命令 CentOS下执行:yum -y installl nmap

     1 #!/bin/bash
     2 
     3 port=$(nmap -sT localhost | grep tcp | grep http | awk '{print $2}')
     4 echo "$port"
     5 ##使用nmap命令扫描服务器,并截取apache服务的状态,赋给变量port
     6 if [ "$port" == "open" ]
     7         then
     8                 echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
     9         else
    10                 if [ -f "/etc/init.d/httpd" ] ; then
    11                         /etc/init.d/httpd start &>/dev/null
    12                         echo "$(date) restart httpd !!" >> /tmp/autostart-err.log
    13                 else
    14                         echo "error is not httpd server your is chack apache?"
    15                 fi
    16 fi
    http.sh

    3.多分支if条件语句

    1 if [ 条件判断1 ] ; then
    2     当前条件判断式1成立时,执行的程序
    3 elif [ 条件判断2 ] ; then
    4     当前条件判断2成立时,执行的程序
    5 .......可写多个
    6 else
    7     当所有条件均不成立时,执行的程序
    8 fi

    例如:1

    #!/bin/bash
    read -p "Please input -a filename:" file
    # 接收键盘的输入,并赋给变量file
    if [ -z "$file" ]
    # 判断变量file是否为空
            then
                    echo "Error please input a filename"
                    exit 1
    elif [ ! -e "$file" ] ; then
    # 判断file的值是否存在
            echo "Your input is not a file!"
            exit 2
    elif [ -f "$file" ] ; then
            echo "is file"
    elif [ -d "$file" ] ; then
            echo "is directory"
    else
            echo "$file is an other file!"
    fi
  • 相关阅读:
    关于supervisor无法监控golang代码的解决方法
    [2017BUAA软工]提问回顾
    [2017BUAA软工]个人阅读作业+总结
    解决nginx+uWSGI部署Django时遇到的static文件404的问题
    [2017BUAA软工]个人项目心得体会:数独
    Week2 Programming Assignment: Linear Regression
    eclipse如何同步自己的preference(oomph preference recorder)
    javac
    Apache Maven Compiler Plugin
    数据库与数据仓库的区别
  • 原文地址:https://www.cnblogs.com/patf/p/4608484.html
Copyright © 2020-2023  润新知