Shell 脚本编程05-Shell 编程实战

一、脚本编程的步骤

1.需求分析

根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命令与语句等。

2.命令测试

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

3.编程

将测试好的命令写入脚本文件中,并通过各种语句将命令执行的结果保存、判断或者发出报警等。

4.调试优化

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

二、案例脚本

1.欢迎脚本的编程

企业环境说明: 为了集中查看 Linux 服务器各方面的运行情况,管理员(root)希望制定自己的登录环境,以便登录时自动显示监控信息。

需求描述: 为 root 用户编写登录欢迎脚本,成功登录报告当前主机中的进程数、已登录用户数、登录的用户名、根文件系统的磁盘使用率。

涉及命令: ps 命令

who 命令

wc 命令

df 命令

grep 命令

awk 命令

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    显示版本信息

示例:

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦