一、条件测试操作
1、文件测试
(1)测试目录/media是否存在,$?返回值为0,表示存在此目录。
如果$?返回值非0,表示不存在此目录
(2)测试目录是否存在,输出结果更加直观。
输出“yes”表示该目录存在
无“yes”输出表示该目录不存在
2、整数值比较
(1)判断当前已登录的用户数,当超过5个时输出“too many”。
没有出现“too many” 说明没有超过5个。
(2)判断当前可用的空闲内存(buffers/cache)大小,当低于2048MB输出具体数值。
3、字符串比较
用户输入“yes”或“no”来确认某个任务
4、逻辑测试
判断当前linux系统的内核版本是否大于2.4。
查看内核
判断
二、if条件语句
1、单分支if语句(参考书上112页的两个案例)
(1)判断挂载点目录,若不存在则自动创建
(2)判断当前用户是否为root,如果不是则报错并执行“exit 1”退出脚本,不再执行其他代码。
2、双分支if语句(参考书上113和114页的两个案例)
(1)判断目标主机是否存活,显示检测结果
(2)检查vsftpd服务是否运行,若运行则列出监听地址,PID号;否则输出提示“警告,vsftpd服务不可用”。(插入linux系统安装光盘,安装一下vsftpd软件包)。
1、编写sysmon.sh脚本
(1)使用df命令提取出根分区的磁盘占用率,赋值给变量DUG。
(2)使用mpstat命令提取CPU使用率,赋值给变量CUG。
(3)使用free命令提取出内存使用率,赋值给变量MUG。
(4)判断上述监控项目是否超标,将需要告警的信息保存到/tmp/alert.txt文件。
(5)判断/tmp/alert.txt文件是否存在,若存在则作为告警邮件发送。
[root@localhost ~]# vi /root/sysmon.sh
#!/bin/bash
# 提取性能监控指标(磁盘占用、CPU使用、内存使用)
DUG=$(df -h | grep "/$" | awk '{print $5}' | awk -F% '{print $1}')
CUG=$(expr 100 - $(mpstat | tail -1 | awk '{print $13}' | awk -F. '{print $1}'))
MUG=$(expr $(free | grep "Mem:" | awk '{print $3}') \* 100 / $(free | grep "Mem:" | awk '{print $2}'))
# 设置告警日志文件、告警邮箱
ALOG="/tmp/alert.txt"
AMAIL="root"
# 判断是否记录告警
if [ $DUG -gt 90 ]
then
echo "磁盘占用率:$DUG %" >> $ALOG
fi
if [ $CUG -gt 80 ]
then
echo "CPU使用率:$CUG %" >> $ALOG
fi
if [ $MUG -gt 90 ]
then
echo "内存使用率:$MUG %" >> $ALOG
fi
# 判断是否发送告警邮件,最后删除告警日志文件
if [ -f $ALOG ]
then
cat $ALOG | mail -s "Host Alert" $AMAIL
rm -rf $ALOG
fi
2、测试sysmon.sh脚本的执行情况
[root@localhost ~]# chmod +x /root/sysmon.sh
[root@localhost ~]# /root/sysmon.sh
再将脚本里80和90的数改小一些,如改为2,再次执行脚本测试。
[root@localhost ~]# /root/sysmon.sh
通过执行下面命令查看结果
[root@localhost ~]# mial
3、设置crontab计划任务
(1)确认系统服务crond已经运行。
绿色running 表示正在运行。
添加crontab计划任务配置,每半小时调用一次sysmon.sh脚本程序。
[root@localhost ~]# crontab –e
*/30 * * * * /root/sysmon.sh