Shell脚本应用实战

实验环境:

随着业务的不断发展,某公司所使用的linux服务器也越来越多,在系统管理和维护过程中,经常需要编写一些实用的小脚本,以辅助运维工作,提高工作效率。

拓扑:

需求描述:

? 编写一个名为getarp.sh的小脚本,记录局域网中各主机的MAC地址
1)保存到/etc/ether文件中,若此文件已存在,应先转移进行备份
2)每行一条记录,第一列为IP地址,第二列为对应的MAC地址

? 编写一个名为scanhost.sh的扫描脚本,检查有哪些主机开启了匿名FTP服务,扫描对象为/etc/ether文件中的所有IP地址,扫描的端口为21

实验步骤

1. 编写getarp.sh脚本文件

1)通过arping命令发送ARP请求,根据反馈结果记录MAC地址

2)将网段地址(如192.168.4.)赋值给变量NADD,作为检测地址的前缀

3)使用while循环语句,重复检测目标并记录MAC地址,主机地址为1-254

clip_image002

clip_image004

clip_image006

2. 编写scanhost.sh脚本

1)有很多方法可以检测一个主机是否开启FTP服务,这里采取wget下载工具访问FTP根目录的方式,若能够成功列表,则视为匿名FTP已开启,否则视为关闭

2)通过awk命令过滤出/etc/ethers文件中的所有IP地址,赋值给变量TARGET

3)使用for循环语句,读取TARGET变量中的IP地址,重复探测FTP的开启情况

clip_image008

clip_image010

总结:

1. for语句可根据已知的列表对象重复执行命令序列,更适合无规律的循环操作

2. while语句可根据特定的条件重复执行命令序列,更适合有规律的循环操作

3. case语句可根据变量的不同取值执行不同的命令序列,比多分支的if语句结构更加清晰

4. linux系统中的各种系统服务器脚本都使用case分支结构,以便通过start、stop、restart等位置参数进行控制