#!/bin/bash
load=`top -n 1 | sed -n '1p' | awk '{print $12}'`
load=${load%\,*}
disk_usage=`df -h | sed -n '2p' | awk '{print $(NF - 1)}'`
disk_usage=${disk_usage%\%*}
overhead=`expr $load \> 2.00`
if [ $overhead -eq 1 ];then
echo "system load is overhead"
fi
if [ $disk_usage -gt 85 ];then
echo "disk is nearly full,need more disk space"
fi
上面的脚本先通过top命令取得系统的load值,-n 1表示只刷新一次,然后使用sed过滤出第一行,也就是包含load信息的行。top命令会输出1分钟、5分钟、15分钟load的平均值,通过awk筛选出1分钟内的平均load,赋值給load变量,而${load%\,*}则是从右边开始,过滤掉不需要的逗号。接下来便是获取磁盘的利用率,通过df命令取得磁盘利用率信息, 用sed筛选包含磁盘总的利用率的第二行,通过awk命令筛选出包含磁盘利用率的倒数第二列,NF表示列的长度,NF - 1就是倒数第二列,也就是磁盘利用率列,再使用${disk_usage%\%*}过滤掉最后的百分号。由于取到的load信息包含两位小数,因此需要使用expr $load \> 2.00 命令进行比较,\是对>进行转义,这句的意思是是否大于2.00,大于得到1,小于得到0,并且将结果赋值給overhead.最后,通过if语句判断系统是否负载过高,或者磁盘利用率占85%以上,如果达到上述上限,则打印输出相关警告信息。
UNIX Shell 里面比较字符写法:
- -eq 等于
- -ne 不等于
- -gt 大于
- -lt 小于
- -le 小于等于
- -ge 大于等于
- -z 空串
- = 两个字符相等
- != 两个字符不等
- -n 非空串