【发布时间】:2013-12-09 13:25:32
【问题描述】:
我想检查两个 IP 地址上的 ping 回复,如果它们都正常,那么我执行一个命令。
例如:
ping 8.8.8.8 on response do
ping 8.8.4.4 on response
execute command
是否有一个简单的 bash 脚本来执行此操作?
【问题讨论】:
-
不知道用什么 bash 语法
我想检查两个 IP 地址上的 ping 回复,如果它们都正常,那么我执行一个命令。
例如:
ping 8.8.8.8 on response do
ping 8.8.4.4 on response
execute command
是否有一个简单的 bash 脚本来执行此操作?
【问题讨论】:
如果
ping根本没有收到任何回复数据包,它将以代码 1 退出。如果同时指定了数据包计数和截止日期,并且在截止日期到达时收到的数据包少于计数,它也会以代码 1 退出。在其他错误时以代码 2 退出。否则以代码 0 退出。这使得可以使用退出代码来查看主机是否处于活动状态。
因此,您可以依靠退出代码来确定是否继续执行脚本。
【讨论】:
ping 8.8.8.8 -c 1
if [ $? = 0 ]
then
echo ok
else
echo ng
fi
使用-c 1 选项仅尝试一次ping。随意更改为任何数字。
$? 是上一条命令的退出代码。你可以参考ping的退出代码。
将上面的代码sn-p修改成你想要的。
【讨论】:
if语句中直接使用ping命令比使用test更简单:if ping -c 1 8.8.8.8; then。
尝试访问一个不存在的网站:
eric@dev ~ $ ping -c 1 does_not_exist.com > /dev/null 2>&1; echo $?
2
尝试访问一个确实存在的网站:
eric@dev /var/www/sandbox/eric $ ping -c 1 google.com > /dev/null 2>&1; echo $?
0
如果它返回 0,则主机被评估为响应。如果不是零,则确定主机不可访问或已关闭。
【讨论】: