无论linux还是windows,我们通常都是使用ping命令来测试局域网设备是否在线,之前使用批处理做过类似的脚本,今天使用shell来练习下。
思路:从文本中取出ip或建一个IP列表的变量,然后循环进行ping测试,再判断ping命令的返回值$?,返回0即可以ping通,否则失败(也可以从执行的结果查找“ttl=”的字符串来判断是否Ping通),如图:
具体实现脚本如下:
#!bin/bash
list="192.168.1.100 192.168.1.101 192.168.1.102 192.168.1.103"
for i in $list
do
ping -c -1 $i >/dev/null
if(($?==0))
then
echo "$i is up!"
else
echo "$i is down!"
fi
done
这样简单的测试脚本就完成了,如果需要从文本中读取,只需要使用while read line进行读入即可,另外,一般ping一次出现误报的几率比较大,可以ping三次,只要ping成功就break,代码实现如下:
#!bin/bash
list="192.168.1.100 192.168.1.101 192.168.1.102 192.168.1.103"
for i in $list
do
ok=0
for count in {1..3}
do
ping -c -1 $i >/dev/null
if(($?==0))
then
ok=1
break
fi
done
if((ok==1))
then
echo "$i is up!"
else
echo "$i is down!"
fi
done