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这种格式