Shell脚本项目实战解析
一、脚本编程步骤分享
1. 脚本编程步骤
- 需求分析
- 命令测试
- 脚本编程
- 测试调优
2. 步骤解析
-
需求分析
根据系统管理的需求,分析脚本要实现的功能,功能实现的层次,实现的命令与语句等 -
命令测试
. 将要用到的命令逐个进行测试,以决定使用的选项,要设置的变量等
3.脚本编程
3. 将测试好的命令写入到脚本文件中,并通过各种语句将命令执行的结果保存,判断或者发出报警等
4.调试优化
- 对脚本进行测试,并根据结果进行优化
- 建议一边编程一边调试,以减少错误的发生
二 项目实战
1.MAC记录与端口扫描脚本
-
企业环境说明
- 随着业务的不断发展,某公司所使用的Linux服务器也越来越多。在系统管理和维护过程中,经常需要编写一些实用的小脚本,以辅助运维工作,通过工作效率
-
需求描述
- 编写名为system.sh的脚本,记录局域网中各主机的MAC地址,保存到/etc/ethers文件中;若此文件已存在,应先转移进行备份;每行一条记录,第一列位IP地址,第2列为对应的MAC地址检查有哪些主机开启了匿名FTP服务,扫描对象为/etc/ethers文件中的所有IP地址,扫描的端口为21
-
命令类型:
分析:记录局域网中各主机的MAC地址;检查有哪些主机开启了匿名FTP服务
ping -c 3 -i 0.2 -w 1 ip :发送MAC地址解析请求
arp -n:记录MAC
awk :打印ip与MAC地址
使用wget下载的方法测试FTP服务[root@server1 ~]# ping -c 3 -i 0.2 -W 3 20.0.0.11 > a.txt [root@server1 ~]# cat a.txt [root@server1 ~]# arping -c 3 -I ens33 -w 3 20.0.0.11 > a.txt [root@server1 ~]# cat a.txt [root@server1 ~]# arping -c 1 -I ens33 -w 3 20.0.0.11 > a.txt [root@server1 ~]# cat a.txt
-c:连接次数
-i:时间间隔
-I:使用网卡
-w:超时时间
[root@server1 ~]# awk '{print $4,$5}' a.txt > b.txt
[root@server1 ~]# cat b.txt
两个主机安装ftp,查看21端口状态
[root@server1 ~]# yum -y install vsftpd
[root@server1 ~]# systemctl start vsftpd
[root@server1 ~]# netstat -anpt | grep 21
[root@server2 ~]# yum -y install vsftpd
[root@server2 ~]# systemctl start vsftpd
[root@server2 ~]# netstat -napt | grep 21
[root@server2 ~]# nmap -p 21 20.0.0.10 查看对应主机21端口是否开启
[root@server2 ~]# nmap -p 21 20.0.0.10 &> /dev/null
[root@server2 ~]# wget ftp://20.0.0.10 匿名下载,下载文件名为index.html
选择一台新的进行shell脚本测试
1.进行记录在线用户并测试其是否开放21号端口
[root@client1 ~]# vi system.sh
[root@client1 ~]# chmod +x system.sh
[root@client1 ~]# ./system.sh
[root@client1 ~]# sort -u /etc/ethers
sort -u:等同于uniq,表示相同的数据仅显示一行
#!/bin/bash
# 记录在线用户并测试其是否开放21号端口
net="20.0.0."
file=/etc/ethers
[ -f /etc/ethers ] && cp -f $file $file.bak
add=1
while [ $add -le 20 ]
do 20.0.0. 1
ping -c 3 -i 0.2 -w 1 ${net}${add} &> /dev/null
if [ $? -eq 0 ]
then arp -n | grep ${net}${add} | awk '{print $1,$3}' >> $file
fi
let add++
done
2.进行ftp在线测试
[root@client1 ~]# vi system.sh
[root@client1 ~]# chmod +x system.sh
[root@client1 ~]# ./system.sh
#!/bin/bash
# 记录在线用户并测试其是否开放21号端口
net="20.0.0."
file=/etc/ethers
[ -f /etc/ethers ] && cp -f $file $file.bak
add=1
while [ $add -le 20 ]
do
ping -c 3 -i 0.2 -w 1 ${net}${add} &> /dev/null
if [ $? -eq 0 ]
then arp -n | grep ${net}${add} | awk '{print $1,$3}' >> $file
fi
let add++
done
sort -u $file >> /root/file1.txt
target=$(awk '{print $1}' /root/file1.txt)
for ip in $target
do
if [ $? -eq 0 ] 如果下载成功
then echo "$ip 主机ftp开启"
rm -rf index.html 删除下载的文件。因为每次测试下载的都是它
fi
done