我正在尝试使用 shell 脚本检查我是否已连接到互联网。我认为我可以通过使用来做到这一点平命令,因为如果 ping 成功,括号内会有 IP 信息。如果没有括号,那么我使用切命令分配一个特定变量,如果是这种情况,该变量将变为空。
所以我写了下面的代码:
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 结果?
答案1
更好的测试,不需要 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
答案2
将名称转换为 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