通过在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