shell小实验详解3——for循环实现在线主机的IP检测

**问:**项目上线前,为了不让上线的服务器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 当前执行的进程/程序名

你可能感兴趣的:(shell小实验详解3——for循环实现在线主机的IP检测)