2013-09-24 29 views
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。但它沒有。即使我回應$的價值?該值始終爲零。

任何人都可以幫我解決這個問題嗎? :)

在此先感謝

回答

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 
+0

謝謝我使用視頻教程中提供的代碼,它似乎工作的教練,但不知道爲什麼它沒有爲我工作。也許是因爲我在OSX上,而他在Red Hat上? 直到[ 「$ STATUS」 -eq 「0」] 做 \t平-c 1個192.168.0.11 \t STATUS ='回聲$?' \t呼應主機關閉 做 –

+0

嗯,有點失去了一些格式有。但我基本上只是把命令替換上面的回聲和工作:)謝謝 –

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 
+1

我不太清楚你的意思。 STATUS變量已設置,然後使用命令替換將狀態值設置爲當前退出狀態。但即使當我使用有效/無效的IP地址它沒有任何區別輸出 –

+0

@NATHANC只需在ping後運行echo改變$?這就是爲什麼STATUS總是保存0.命令替換'''echo $?'''與它無關,也是不必要的。請試試我的例子。 – konsolebox

+1

嗨,是的,我知道我的例子並不是最有效的,它只是幫助我理解和學習bash,而我正在關注CBT vids。這真的幫助我學習,雖然:)非常感謝你 –