通过在bash脚本中使用ping来检查主机的可用性
我想编写一个脚本,它会继续检查networking中是否有任何应该整天在线的设备真的在线。 我试图使用ping,但是
if [ "`ping -c 1 some_ip_here`" ] then echo 1 else echo 0 fi
如果input有效或无效的IP地址,则给出1
。 我如何检查一个特定的地址(或更好的IP地址列表中的任何设备)是否脱机?
Ping根据错误types返回不同的退出代码。
ping 256.256.256.256 ; echo $? # 68 ping -c 1 127.0.0.1 ; echo $? # 0 ping -c 1 192.168.1.5 ; echo $? # 2
0表示主机可达
2表示无法访问
if语句中不需要反引号。 你可以使用这个检查
if ping -c 1 some_ip_here &> /dev/null then echo 1 else echo 0 fi
if命令检查以下命令(ping)的退出代码。 如果退出代码为零(表示命令退出成功),则将执行该块。 如果它返回一个非零的退出码,那么else块将被执行。
有高级版本的ping – “fping”,可以定义以毫秒为单位的超时时间。
#!/bin/bash IP='192.168.1.1' fping -c1 -t300 $IP 2>/dev/null 1>/dev/null if [ "$?" = 0 ] then echo "Host found" else echo "Host not found" fi
我可以想像这样一个class轮运行
ping -c 1 127.0.0.1 &> /dev/null && echo success || echo fail
将127.0.0.1replace为IP或主机名,将echo命令replace为任何情况下需要执行的操作。
上面的代码将成功,也许尝试使用您知道的IP或主机名称是不可访问的。
喜欢这个:
ping -c 1 google.com &> /dev/null && echo success || echo fail
和这个
ping -c 1 lolcatz.ninja &> /dev/null && echo success || echo fail
仅供参考,我只是使用上述方法做了一些testing,如果我们使用多个ping(10个请求)
ping -c10 8.8.8.8&> / dev / null; echo $?
如果至less有一个ping结果可达,则多ping命令的结果为“0”,如果所有ping请求都不可达,则结果为“1”。
up=`fping -r 1 $1 ` if [ -z "${up}" ]; then printf "Host $1 not responding to ping \n" else printf "Host $1 responding to ping \n" fi