0

我正在编写一个小脚本来检查主机是启动还是关闭。

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

如果它 ping 一个启动的主机并退出直到循环,它应该将状态更改为 0。但它没有。即使我回显 $ 的价值?该值始终为零。

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

提前致谢

4

2 回答 2

3

你有echo The host is downping命令。所以$?需要命令的退出状态而echo不是ping命令。

ping -c 1 192.168.0.3
STATUS=$?
if [ $STATUS -ne 0 ]; then
   echo "The host is down"
fi
于 2013-09-24T18:12:11.317 回答
0

您在保存状态后放置了 echo ,这就是您总是得到 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
于 2013-09-24T18:06:41.023 回答