**问:**项目上线前,为了不让上线的服务器IP地址与线网上的IP地址产生冲突,需要扫描服务器IP所在网段的IP,得出在线IP与不在线的IP地址,并存入文件中,假设检测网段为192.168.100.0/24。
分析:
1.使用ping命令检测是否在线。
2.使用for循环得出所有ip
3.通过条件语句判断ping命令的结果存入相应文档
代码:
#!/bin/bash
W="192.168.100." //定义变量
for ((i=1; i<=254; i++)) //循环1-254
do
IP="$W$i" //变量赋予得出完整IP
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null //ping命令
if [ $? -eq 0 ];then //判断上条命令是否成功
echo "host $IP is up" && echo "host $IP is up" >> /root/ipup.txt //能ping通即在线
else
echo "host $IP is down" && echo "host $IP is down" >> /root/ipdown.txt//否则不在线
fi
done
小技巧:
ping [选项][主机名或IP地址]
选项 | 用法 |
---|---|
-c | 数据包个数 |
-i | 发送间隔 |
-W | 等待时间 |
由于ping命令不加任何参数时,除非手动中断,否则它会一直piing下去,所以在做连续测试的时候,要添加合适的ping选项参数。
预定义变量
在使用条件语句时,判断条件为&?是否等于0,在这样用到了预定义变量这个知识点
名称 | 用法 |
---|---|
$# | 命令行中位置变量的个数 |
$* | 所有位置变量的内容 |
$? | 上一条命令执行后返回的状态,当返回状态为0时,表示执行正常,非0值表示执行异常或错误 |
$0 | 当前执行的进程/程序名 |