脚本编程步骤
1.需求分析
根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命令与语句等。
2.命令测试
将要用到的命令逐个进行测试,以决定使用的选项、要设置的变量等。
3.脚本编程
将测试好的命令写入到脚本文件中,并通过各种语句将命令执行的结果保存、判断或者发出报警等。
4.测试调优
对脚本进行测试,并根据结果进行优化。
建议一边编程一边调试,以减少错误的发生。
项目示例
需求描述
1.编写名为system.sh的脚本,记录局域网中各主机的MAC地址,保存到/etc/ethers文件中;若此文件已存在,应先转移进行备份;每行一条记录,第一列位IP地址,第2列为对应的MAC地址。
2.检查有哪些主机开启了匿名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@server ~]# ping -c 3 -i 0.2 -W 3 20.0.0.10 > a.txt '-c表示连接次数,-i表示时间间隔'
[root@server ~]# cat a.txt
[root@server ~]# arping -c 3 -I ens33 -w 3 20.0.0.10 > a.txt '-I表示使用网卡,-w表示超时时间'
[root@server ~]# cat a.txt
[root@server ~]# arping -c 1 -I ens33 -w 3 20.0.0.10 > a.txt
[root@server ~]# cat a.txt
[root@server2 ~]# yum -y install vsftpd '安装ftp服务'
[root@server2 ~]# systemctl start vsftpd '服务启动'
[root@server2 ~]# netstat -anpt | grep 21 '查看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'
脚本测试:
1.记录在线用户并测试其是否开放21号端口
[root@client1 ~]# vi system.sh
#!/bin/bash
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
[root@client1 ~]# chmod +x system.sh
[root@client1 ~]# ./system.sh
[root@client1 ~]# sort -u /etc/ethers 'sort -u 等同于uniq,表示相同的数据仅显示一行'
2.ftp在线测试
[root@client1 ~]# vi system.sh
#!/bin/bash
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
wget ftp://$ip &> /dev/null '匿名下载'
if [ $? -eq 0 ] '如果下载成功就执行后面的语句'
then echo "$ip 主机ftp开启"
rm -rf index.html '删除下载的文件,避免重复 '
fi
done
[root@client1 ~]# chmod +x system.sh
[root@client1 ~]# ./system.sh