Shell 编程实战

Posted 纵拥千晚星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell 编程实战相关的知识,希望对你有一定的参考价值。

Shell 编程实战

技能展示:

  • 会使用脚本扫描 MAC 记录与端口
  • 会使用脚本进行系统监控

脚本编程步骤

脚本编程一般分为以下几个步骤:

 需求分析:根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命

令与语句等;

 命令测试:将要用到的命令逐个进行测试,以决定使用的选项、要设置的变量等;

 脚本编程:将测试好的命令写入到脚本 文件中,并通过各种语句将命令执行的结果保

存、判断或者发出报警等;

 测试调优:对脚本进行测试,并根据结果进行优化,建议一边编程一边调试以减少错误

的发生。

6.2 MAC 记录与端口扫描脚本

1.需求描述

 编写名为 system.sh 的小脚本,记录局域网中各主机的 MAC 地址,保存到/etc/ethers

文件中;若此文件已存在,应先转移进行备份;每行一条记录,第 1 列为 IP 地址,第

2 列为对应的 MAC 地址。

 检查有哪些主机开启了匿名 FTP 服务,扫描对象为/etc/ethers 文件中的所有 IP 地址,

扫描的端口为 21。

2.实现步骤

[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

以上是关于Shell 编程实战的主要内容,如果未能解决你的问题,请参考以下文章

《shell编程实战》第2章shell脚本入门

Shell 编程实战

Shell编程实战

Shell编程实战

《shell编程实战》第2章shell脚本入门(下)

《shell编程实战》第3章shell变量基础(下)