Shell脚本编程-05——Shell编程实战
一、脚本编程的步骤
1、需求分析
根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命令与语句等。
2、命令测试
将要用到的命令逐个进行测试,以决定使用的选项、要设置的变量等。
3、编程
将测试好的命令写入脚本文件中,并通过各种语句将命令执行的结果保存、判断或者发出报警等。
4、调试优化
对脚本进行测试,并根据结果进行优化,建议一边编程一边调试,以减少错误的发生。
二、案例脚本
1、欢迎脚本的编程
(1)企业环境说明
为了集中查看Linux服务器各方面的运行情况,管理员(root)希望制定自己的登录环境,以便登录时自动显示监控信息。
需求描述:为root用户编写登录欢迎脚本,成功登录报告当前主机中的进程数、已登录用户数、登录的用户名、根文件系统的磁盘使用率。
涉及命令:
ps命令
who命令
wc命令
df命令
grep命令
awk命令
测试后删除set -x 与set +x
2、MAC记录与端口扫描脚本
企业环境说明:随着业务的不断发展,某公司所使用的Linux服务器也越来越多。在系统管理和维护过程中,经常需要编写一些实用的小脚本,以辅助运维工作,提高工作效率。
需求描述:编写名为system.sh的小脚本,记录局域网中各主机的MAC地址,保存到/etc/ethers文件中;若此文件已存在,应先转移进行备份;每行一条记录,第1列为IP地址,第2列为对应的MAC地址。
检查有哪些主机开启了匿名FTP服务,扫描对象为/etc/ethers文件中的所有IP地址,扫描端口为21。
知识点补充:
arping 命令,在指定网卡上发送ARP请求指定地址
-A ARP回复模式,更新邻居
-b 保持广播
-D 复制地址检测模式
-f 得到第一个回复就退出
-q 不显示警告信息
-U 主动的ARP模式,更新邻居
-c 发送的数据包的数目
-w 设置超时时间
-I 使用指定的以太网设备,默认情况下使用eth0
-s 指定源IP地址
-h 显示帮助信息
-V 显示版本信息
arp 命令,管理系的arp缓存
-d IP地址 删除一个arp表项 例:arp -d 192.168.1.104
-s IP地址 MAC地址 设置一个arp表项 例:arp -s 192.168.1.108 00:0c:29:11:22:33
-a 使用bsd形式输出。(没有固定的列)
-n 使用数字形式显示ip地址,而不是默认的主机名形式
-D 不是指定硬件地址而是指定一个网络接口的名称,表项将使用相应接口的MAC地址。一般用来设置ARP代理
-i 指定设置哪个网络接口上面的arp表项 例:arp -i eth1
-f filename: 作用同'-s',不过它通过文件来指定IP地址和MAC地址的绑定。文件中每行分别是主机和MAC,中间以空格分割。如果没有指定文件名称,则使用/etc/ethers文件
wget 命令
-t, --tries=NUMBER 设置重试次数为 NUMBER (0 代表无限制)
-T, --timeout=SECONDS 将所有超时设为 SECONDS 秒
-O, --output-document=FILE 将文档写入 FILE
-Q, --quota=NUMBER 设置获取配额为 NUMBER 字节
--limit-rate=RATE 限制下载速率为 RATE
-c, --continue 断点续传下载文件
-q, --quiet 安静模式 (无信息输出)
-r, --recursive 指定递归下载
-l, --level=NUMBER 最大递归深度 (inf 或 0 代表无限制,即全部下载)
--ftp-user=USER 设置 ftp 用户名为 USER
--ftp-password=PASS 设置 ftp 密码为 PASS
-A, --accept=LIST 逗号分隔的可接受的扩展名列表
-R, --reject=LIST 逗号分隔的要拒绝的扩展名列表
3、开发系统监控脚本
企业环境说明:某公司随着业务的不断发展,所使用的Linux服务器也越来越多。管理员希望编写一个简单的性能监控脚本,放到各个服务器中,当监控指标出现异常时发送告警邮件。
需求描述:编写名为sysmon.sh的Shell监控脚本,监控内容包括:CPU使用率、内存使用率、根分区的磁盘占用率(百分比精确到个位)。出现以下任一情况时报警:磁盘占用率超过90%、CPU使用率超过80%、内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱。结合crond服务,每半小时执行一次控制脚本。
涉及命令:
df命令、awk命令、mpstat命令(由sysstat包安装)、free命令、crontab命令。
知识点补充:
mpstat 命令
格式:mpstat [-P {|ALL}] [internal [count]]
每隔1秒统计一次,共统计三次
字段函意:
%user 在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程 (usr/total)*100
%nice 在internal时间段里,nice值为负进程的CPU时间(%) (nice/total)*100
%sys 在internal时间段里,内核时间(%) (system/total)*100
%iowait 在internal时间段里,硬盘IO等待时间(%) (iowait/total)*100
%irq 在internal时间段里,硬中断时间(%) (irq/total)*100
%soft 在internal时间段里,软中断时间(%) (softirq/total)*100
%idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)*100
free命令
-b 显示内存的单位为字节
-k 显示内存的单位为KB
-m 显示内存的单位为M
-o 忽略缓冲区调节列
-t 总和信息
-s 每隔指定时间执行一次命令,单位为s
-h 以可读形式显示容量,需要free -V显示版本大于3.3
-V 版本信息
脚本编写知识点补充:
若编写一个较为复杂庞大的shell脚本时,为了方便后期排错,需要建立日志文件记录错误发生的信息,可以使用tee命令。
tee 命令:用来将标准输入的内容输出到标准输出并可以保存为文件
-a 附加到文件
-i 无视中断
--help 显示帮助信息
--version 显示版本信息
示例: