SHELL使用--if语句

if语句

if单分支

if 条件1;then
    命令1
    命令2
    命令3
    。。。
fi

# 等同于:
[ 条件1 ] && 命令1 

示例1:

  • 检测硬盘根分区的使用率,如果大于70,就输出警告信息
#!/bin/bash

# 第一步:获取硬盘的使用率
disk_use=`df | grep ‘/$‘ |awk ‘{print $5}‘ | cut -d% -f1`
# 第二步:
if [ $disk_use -gt 70 ];then
    echo "Warning:disk space is not enough"
fi

示例2:

  • 判断文件中是否存在root用户
===========================版本1===========================
#!/bin/bash

grep "^root" /etc/passwd &>/dev/null
if [ $? -eq 0 ];then
    echo "Y"
else
    echo "N"
fi
===========================版本1===========================
#!/bin/bash

if grep "^root" /etc/passwd &>/dev/null;then
    echo "Y"
else
    echo "N"
fi

if双分支

if 条件1;then
    命令1
    命令2
    命令3
    。。。
else
    命令1
    命令2
    命令3
    。。。 
fi

# 等同于:
[ 条件1 ] && 命令1 || 命令2

示例1:

  • 登录用户和密码匹配进行登录
#!/bin/bash

read -p "用户名>>: " name
read -p "密码>>: " pass

if [ $name == "egon" ] && [ $pass == "123" ];then
    echo "登录成功"
else
    echo "账号或密码输入错误"
fi

if多分支

if 条件1;then
    命令1
    命令2
    命令3
    。。。
elif 条件2;then
    命令1
    命令2
    命令3
    。。。
elif 条件2;then
    命令1
    命令2
    命令3
    。。。 
...
else
    命令1
    命令2
    命令3
    。。。 
fi

示例1:

  • 获取硬盘根分区的使用率,根据比较输出不同级别的日志
#!/bin/bash

#1、获取硬盘根分区的使用率
disk_use=`df | grep ‘/$‘ |awk ‘{print $5}‘ | cut -d% -f1`

#2、根据比较输出不同级别的日志
if [ $disk_use -ge 90 ];then  # >=90
    echo "Critical:disk space is full"
elif [ $disk_use -ge 70 -a $disk_user -lt 90 ];then  # >=70 <90
    echo "Error:disk space will be full"
elif [ $disk_use -ge 50 -a $disk_user -lt 70 ];then  # >=50 < 70
    echo "Warning:disk space is not enough"
else
    echo "info:disk space is ok"
fi


==============================改进===========================
#!/bin/bash

#1、获取硬盘根分区的使用率
#disk_use=`df | grep ‘/$‘ |awk ‘{print $5}‘ | cut -d% -f1`
#disk_use=99
#disk_use=73
#disk_use=53
disk_use=30

#2、根据比较输出不同级别的日志
if [ $disk_use -ge 90 ];then  # >=90
    echo "Critical:disk space is full"
elif [ $disk_use -ge 70 ];then  # >=70 <90
    echo "Error:disk space will be full"
elif [ $disk_use -ge 50 ];then  # >=50 < 70
    echo "Warning:disk space is not enough"
else
    echo "info:disk space is ok"
fi

示例2:

  • 数字猜大小
#!/bin/bash
# 首先判断这个值必须为一个值,并且为数字
[ $# -ne 1 ] && echo "必须输入1个参数" && exit
[[ ! $1 =~ ^[0-9]+$ ]] && echo "必须输入数字" && exit
 
if [ $1 -gt 18 ];then
    echo "too big"
elif [ $1 -lt 18 ];then
    echo "too small"
else
    echo "you got it"
fi

示例3:

  • 判断文件类型
#!/bin/bash
# 首先判断这个值必须为一个参数
[ $# -ne 1 ] && echo "必须输入1个参数" && exit
 
if [ -L $1 ];then
    echo "是一个链接文件"
elif [ -d $1 ];then
    echo "是一个目录文件"
elif [ -f $1 ];then
    echo "是一个标准文件"
else
    echo "其他类型的文件"
fi

示例4:

  • 启动服务脚本
#!/bin/bash
netstat -an | grep ‘\bLISTEN\b‘ | grep ‘\b80\b‘ &>/dev/null
if [ $? -eq 0 ];then
    echo "80端口的服务正常"
else
    systemctl start httpd &>/dev/null
    if [ $? -eq 0 ];then
        echo "80端口启动成功"
    else
        echo "80端口启动失败"
    fi    
fi

示例5:

  • 监控脚本

  • 实现:

    根分区剩余空间小于10%
    内存的剩余空间小于30%
    向用户egon发送告警邮件,邮件的内容包含使用率相关信息

#!/bin/bash

# 1、获取根分区的剩余空间
disk_use=`df | grep ‘/$‘ | awk ‘{print $5}‘ | cut -d% -f1`

# 2、获取内存的剩余率
mem_free=`free | grep ‘Mem‘ |awk ‘{print $4}‘`
mem_total=`free | grep ‘Mem‘ |awk ‘{print $2}‘`
mem_free_percent=`echo "scale=2;$mem_free / $mem_total" |bc |cut -d. -f2`

# 3、判断+报警
if [ $disk_use -gt 90 ];then
    echo "硬盘使用率${disk_use}%,不够用啦,请及时处理" | mail -s "磁盘报警" 18611453110@163.com
fi

if [ $mem_free_percent -lt 30 ];then
    echo "内存剩余率${mem_free_percent}%,不够用啦,请及时处理" | mail -s "内存报警" 18611453110@163.com
fi

·# tell you一个小细节
当经常对邮箱发送邮件容易被当成垃圾邮件直接发送至垃圾箱中,可以将主机名改为tcy.xxx.com这种格式

SHELL使用--if语句

上一篇:常见网络、进程、内存监测工具


下一篇:Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数