我正在研究檢查主機是啓動還是關閉的小腳本。Bash Exit Ping的狀態代碼
until [ "$STATUS" -eq "0" ]
do
ping -c 1 192.168.0.3
echo The host is down
STATUS=`echo $?`
done
如果ping一個已啓動的主機並退出until循環,它應該將狀態更改爲0。但它沒有。即使我回應$的價值?該值始終爲零。
任何人都可以幫我解決這個問題嗎? :)
在此先感謝
我正在研究檢查主機是啓動還是關閉的小腳本。Bash Exit Ping的狀態代碼
until [ "$STATUS" -eq "0" ]
do
ping -c 1 192.168.0.3
echo The host is down
STATUS=`echo $?`
done
如果ping一個已啓動的主機並退出until循環,它應該將狀態更改爲0。但它沒有。即使我回應$的價值?該值始終爲零。
任何人都可以幫我解決這個問題嗎? :)
在此先感謝
您有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
您放置迴音節約是這樣的狀態後,爲什麼你總是得到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
我不太清楚你的意思。 STATUS變量已設置,然後使用命令替換將狀態值設置爲當前退出狀態。但即使當我使用有效/無效的IP地址它沒有任何區別輸出 –
@NATHANC只需在ping後運行echo改變$?這就是爲什麼STATUS總是保存0.命令替換'''echo $?'''與它無關,也是不必要的。請試試我的例子。 – konsolebox
嗨,是的,我知道我的例子並不是最有效的,它只是幫助我理解和學習bash,而我正在關注CBT vids。這真的幫助我學習,雖然:)非常感謝你 –
謝謝我使用視頻教程中提供的代碼,它似乎工作的教練,但不知道爲什麼它沒有爲我工作。也許是因爲我在OSX上,而他在Red Hat上? 直到[ 「$ STATUS」 -eq 「0」] 做 \t平-c 1個192.168.0.11 \t STATUS ='回聲$?' \t呼應主機關閉 做 –
嗯,有點失去了一些格式有。但我基本上只是把命令替換上面的回聲和工作:)謝謝 –