shell下用ping 測試一個網路是否通,只顯示結果而不顯示過程輸出
阿新 • • 發佈:2019-01-30
要求:用ping 測試一個網址但只顯示是否通而不顯示過程輸出 if [ "`ping -c 1 A.B.C.D `" ]; then echo yes && exit 0 else echo no && exit 0 fi 如果不管這個地址ping 不ping 得通 都會輸出yes 因為通不通都會有標準輸出(也就是螢幕上有返回值啦!)。 如果改成如下: if [ "`ping -c 1 A.B.C.D > /dev/null 2>&1`" ]; then echo yes && exit 0 else echo no && exit 0 fi 不管通不通都返回no;因為標準輸出的結果是空,而不管返回值是0還是1 如果改成: if ping -c 1 A.B.C.D >/dev/null 2>&1 ; then echo yes else echo no! fi 只有通才返回yes 原因:if 是根據ping 的返回值來判斷的,而根標準輸出是否為空無關,儘管此時前ping -c 1 219.229.154.101 >/dev/null 2>&1 在標準輸出上是空,但是ping 的返回值還是 true (即 0); 總結:前兩句都是判斷 []中是否為空 而第三個,則是將ping的返回值給if判斷