[英]Linux bash script to check internet connection not working
我想在我的樹莓派上使用 bash 腳本來檢查互聯網連接是否仍然存在。
我找到了我擴展的這個腳本:
#!/bin/bash
# I do not work properly
if [[ "$(ping -c 1 8.8.8.8 | grep 'Network is unreachable' )" != "" ]]; then
echo "Network isn't present"
sudo shutdown -r 0
exit 1
fi
# I work properly
if [[ "$(ping -c 1 8.8.8.8 | grep '100% packet loss' )" != "" ]]; then
echo "Internet isn't present"
sudo shutdown -r 0
exit 1
else
echo "Internet is present"
exit 0
fi
第二部分效果很好,但是,第一部分沒有。
我拔下以太網電纜並收到一條錯誤消息,例如connect: Network is unreachable
。 所以正如預期的那樣。 但我不明白為什么我的腳本沒有撿起來? 我認為這與它是一條錯誤消息而不是輸出有關。 但我不知道我將如何調整我的腳本以從錯誤消息中獲取 grep,假設這是正確的。
我找到了一種如何通過使用這一行ping -c 1 8.8.8.8 2> >(grep 'unreachable';)
來讓 grep 注冊輸出的方法。 但是,這仍然使我的腳本失敗,因為該行的其余部分不再識別它。 而且我也不完全理解2> >()
作用。
你真的不需要在這里進行字符串比較:
ping
命令在完成執行后給出適當的返回碼。
所以,你可以使用類似的東西:
function check_connectivity() {
local test_ip
local test_count
test_ip="8.8.8.8"
test_count=1
if ping -c ${test_count} ${test_ip} > /dev/null; then
echo "Have internet connectivity"
else
echo "Do not have connectivity"
fi
}
check_connectivity
嘗試這個:
x=`ping -c1 google.com 2>&1 | grep failure`
if [ ! "$x" = "" ]; then
echo "Network isn't present"
sudo shutdown -r 0
exit 1
fi
或者對於您的腳本,我會這樣做:
if [[ "$(ping -c 1 8.8.8.8 | grep '100% packet loss' )" != "" ]]; then
echo "Internet isn't present"
sudo shutdown -r 0
exit 1
elif [[ "$(ping -c 1 8.8.8.8 | grep 'packet loss' | grep -o "1[0-9][0-9]\+%")" != "" ]]; then
echo "Network isn't present"
sudo shutdown -r 0
exit 1
else
echo "Internet is present"
exit 0
fi
# Test for network conection
for interface in $(ls /sys/class/net/ | grep -v lo);do
if [[ $(cat /sys/class/net/$interface/carrier) = 1 ]]; then OnLine=1;fi;done
if ! [ $OnLine ]; then echo "Internet isn't present" > /dev/stderr;sudo shutdown -r 0; exit; fi
立即返回結果:
$ net lookup example.com
`Didn't find example.com#20`
$ net lookup example.com
`93.184.216.34`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.