Shell 编程实战

志不强者智不达,言不信者行不果。这篇文章主要讲述Shell 编程实战相关的知识,希望能为你提供帮助。
Shell 编程实战
技能展示:

  • 会使用脚本扫描 MAC 记录与端口
  • 会使用脚本进行系统监控
脚本编程步骤
脚本编程一般分为以下几个步骤:
? 需求分析:根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命
令与语句等;
? 命令测试:将要用到的命令逐个进行测试,以决定使用的选项、要设置的变量等;
? 脚本编程:将测试好的命令写入到脚本 文件中,并通过各种语句将命令执行的结果保
存、判断或者发出报警等;
? 测试调优:对脚本进行测试,并根据结果进行优化,建议一边编程一边调试以减少错误
的发生。
6.2 MAC 记录与端口扫描脚本
1.需求描述
? 编写名为 system.sh 的小脚本,记录局域网中各主机的 MAC 地址,保存到/etc/ethers
文件中;若此文件已存在,应先转移进行备份;每行一条记录,第 1 列为 IP 地址,第
2 列为对应的 MAC 地址。
? 检查有哪些主机开启了匿名 FTP 服务,扫描对象为/etc/ethers 文件中的所有 IP 地址,
扫描的端口为 21。
2.实现步骤
【Shell 编程实战】[root@localhost ~]# vi system.sh
#!/bin/bash
1. 定义网段地址、MAC 列表文件NADD="192.168.10."
FILE="/etc/ethers"
2. 发送 ARP 请求,并记录反馈结果[ -f $FILE ] & & /bin/cp -f $FILE $FILE.old #备份原有文件
HADD=1 #定义起始扫描地址
while [ $HADD -lt 254 ]
do
ping -c 2 -w 1 $NADD$HADD & > /dev/null
if [ $? -eq 0 ]
then
arp -n | grep $NADD$HADD | awk print $1,$3 > > $FILE
fi
let HADD++
done
TARGET=$(awk print $1 /etc/ethers)
echo "以下主机已开放匿名 FTP 服务:"
for IP in $TARGET
do
wget ftp://$IP/ & > /dev/null
if [ $? -eq 0 ] ; then
echo $IP
rm -rf index.html #事先在 ftp 服务器上准备下载文件,测试后删除
fi
done
[root@localhost ~]# chmod +x system.sh
[root@localhost ~]# ./sysem.sh #执行检测程序
[root@localhost ~]# cat /etc/ethers #确认记录结果


开发系统监控脚本
1.需求描述
? 编写名为 sysmon.sh 的 Shell 监控脚本。
? 监控内容包括 CPU 使用率、内存使用率、根分区的磁盘占用率。
? 百分比只需精确到个位,如 7%、12%、23%等。
? 出现以下任一情况时告警:磁盘占用率超过 90%、CPU 使用率超过 80%、内存使用率超
过 90%,告警邮件通过 mail 命令发送到指定邮箱。
? 结合 crond 服务,每半小时执行一次监控脚本。
2.实现步骤
(1)编写 Shell 监控脚本
[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 $12 | 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@localhost"
判断是否记录告警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
[root@localhost ~]# chmod +x /root/sysmon.sh
(2)测试 sysmon.sh 脚本的执行情况
首先确认有可用的邮件服务器(如 Postfix、Sendmail 等),然后调低监控阈值,执行
sysmon.sh 脚本进行测试。
[root@localhost ~]# /root/sysmon.sh
然后查收 root@localhost 的邮箱,确认告警邮件内容。
[root@localhost ~]$ mail
(3)设置 crontab 计划任务
首先确认系统服务 crond 已经运行。
[root@localhost ~]# /etc/init.d/crond status
crond (pid 5839) 正在运行...
然后,添加 crontab 计划任务配置,每半小时调用一次 sysmon.sh 脚本程序。
[root@localhost ~]# crontab -e
*/30 * * * * /root/sysmon.sh


    推荐阅读