Ping

如何清理/刷新網站儲存的 IP 資訊?

  • March 28, 2022

我正在嘗試使用 shell 腳本檢查我是否連接到網際網路。我認為我可以通過使用ping命令來做到這一點,因為如果 ping 成功,括號內有一個 IP 資訊。如果沒有括號,那麼我使用cut命令分配一個特定的變數,如果是這種情況,該變數將變為空。

所以我寫了下面的程式碼:

echo " First check whether internet is working or not  : "
internetCheck=$(ping -c 1 google.com | cut -s -d "(" -f1)
if [ -z "$internetCheck" ]; then 
 echo "NO INTERNET CONNECTION FOUND !"
else 
 echo "[ OK ] Internet is connected.\n"
fi

它奏效了。但是,當我關閉連接並為同一網站(google.com)重複腳本時,系統(?)會記住最後一個 ping 命令的結果,因此它會失敗。如何清理/刷新以前的 ping 結果?

更好的測試,不需要grep…

echo " First check whether internet is working or not  : "
if ping -q -c 1 <host> > /dev/null 2>&1 ; then
 echo "[ OK ] Internet is connected.\n"
else 
 echo "NO INTERNET CONNECTION FOUND !"
fi

將名稱轉換為 IP 地址通常由本地 DNS 解析器完成,並且確實被記憶體了。這就是為什麼即使您沒有連接也可以獲得地址的原因。

尋找更好的方法是100% packet loss,這裡是您的腳本的修改版本。

echo " First check whether internet is working or not  : "
if ping -c 1 google.com | grep -qE '100% packet loss|Temporary failure in name resolution' ; then 
 echo "NO INTERNET CONNECTION FOUND !"
else 
 echo "[ OK ] Internet is connected.\n"
fi

引用自:https://unix.stackexchange.com/questions/689047