Bash退出Ping的状态代码

时间:2013-09-24 18:05:16

标签: bash loops ping hosts

我正在制作一个小脚本,用于检查主机是启动还是关闭。

until [ "$STATUS" -eq "0" ]
do
ping -c 1 192.168.0.3
echo The host is down
STATUS=`echo $?`
done

如果它ping了主机并且退出until循环,则应该将状态更改为0。但它没有。即使我回应了$的价值?该值始终为零。

任何人都可以帮我解决这个问题吗? :)

提前致谢

2 个答案:

答案 0 :(得分:3)

echo The host is down命令后你有ping。因此$?采用echo命令的退出状态而不是ping命令。

ping -c 1 192.168.0.3
STATUS=$?
if [ $STATUS -ne 0 ]; then
   echo "The host is down"
fi

答案 1 :(得分:0)

在保存状态后放置了回声,这就是为什么你总是得到0:

ping -c 1 192.168.0.3
echo The host is down  ## Always changes $? to 0
STATUS=`echo $?`

一种更好的方法可能是:

until ping -c 1 192.168.0.3; do
    echo "The host is down"
done

更长的版本:

until ping -c 1 192.168.0.3; STATUS=$?; [ "$STATUS" -eq "0" ]; do
    echo "The host is down"
done