检查网络连接

时间:2015-02-22 17:56:18

标签: bash

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

我在这里做错了什么?

2 个答案:

答案 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!'