2015-09-03 34 views
0

我正在製作一個運行無限循環的簡單shell腳本,然後如果ping命令的輸出包含「time」(表示它成功ping通),它應該回顯「Connected! 「,睡1,並且清楚。但是,我的腳本沒有輸出。創建一個shell腳本來檢查網絡連接

#!/bin/bash 
while : 
do 
    if [[ $(ping google.com) == *time* ]]; 
    then 
     echo -en '\E[47;32m'"\033[1mS\033[0m" 
     echo "Connected!" 
    else 
     echo -en '\E[47;31m'"\033[1mZ\033[0m" 
     echo "Not Connected!" 
    fi 
    clear 
    sleep 1 
done 
+0

你什麼時候期待'ping'退出讓腳本的其餘部分繼續? –

+0

這也是一個可怕的濫用測試。如果你想測試你可以到達你的機器,試試你的網關或者一個DNS請求等等。使用一臺你真正與之有關係的服務器,然後對隨機遠程服務器進行ping測試。 –

+1

另外'ping'返回告訴你它是否有效的退出代碼。不需要字符串匹配。 –

回答

4

您的腳本沒有給出輸出,因爲ping永不終止。爲了得到ping來測試你的連接,你想給它一個運行計數(-c)和響應超時(-W),然後檢查其返回代碼:

#!/bin/bash 
while true 
do 
    if ping -c 1 -W 5 google.com 1>/dev/null 2>&1 
    then 
     echo -en '\E[47;32m'"\033[1mS\033[0m" 
     echo "Connected!" 
    else 
     echo -en '\E[47;31m'"\033[1mZ\033[0m" 
     echo "Not Connected!" 
    fi 
    clear 
    sleep 1 
done 

ping將返回0如果是能夠成功地ping給定的主機名,否則爲非零。

還值得注意的是,此循環的迭代將運行不同的時間段,具體取決於ping是否快速成功或失敗,例如由於沒有網絡連接。您可能希望使用timesleep將迭代保持恆定的時間長度 - 例如15秒。