if [[ `ping -c1 8.8.8.8 | grep "100%" | wc -l` = 1 ]]
这有助于我检查互联网连接是否存在问题,因为:
ping -c1 8.8.8.8 | grep "100%"
1 packets transmitted, 0 received, 100% packet loss, time 0ms
ping -c1 8.8.8.8 | grep "100%" | wc -l
1
但是当我得到
时它并没有帮助ping -c1 8.8.8.8 | grep "100%" | wc -l
connect: Network is unreachable
0
所以我做了:
ping -c1 8.8.8.8 | grep "100%|unreachable" | wc -l
connect: Network is unreachable
0
我在这里做错了什么?
答案 0 :(得分:3)
不依靠ping的文本输出来告诉您网络是否无法访问,更好的机制是依赖退出状态。
ping -c1 -q 8.8.8.8
status=$?;
case $status in
0)
echo "host is alive";
;;
1)
echo "network unreachable or host not responding to pings";
;;
2)
echo "No route to host or other error";
;;
esac
注意:根据我的经验,单独ping是非常缓慢和麻烦的。如果您希望快速了解网络是否存在,特别是在脚本中,我会查看fping
,它会更快地为您提供相同的结果: - )
答案 1 :(得分:-1)
这个解决方案在我测试时起作用了:
res=$(ping -c1 8.8.8.8)
echo "$res" | grep "100%" | wc -l &&
echo "$res" | grep "unreachable" | wc -l &&
echo 'Connection good!'