![为什么我检查互联网连接的代码失败了?](https://linux22.com/image/1491780/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E6%A3%80%E6%9F%A5%E4%BA%92%E8%81%94%E7%BD%91%E8%BF%9E%E6%8E%A5%E7%9A%84%E4%BB%A3%E7%A0%81%E5%A4%B1%E8%B4%A5%E4%BA%86%EF%BC%9F.png)
我正在尝试编辑一个脚本,以便它在执行其余命令之前检查互联网连接,但问题是无论我尝试什么结果(在线或不在线)答案总是 0 我提供了下面我想出的代码,希望有人可以看看它并就如何解决我的困境提出一些想法。我尝试了多种方法,但结果都一样。如果需要,我可以提供更多代码或我的计算机信息,谢谢。
[root@MercadesBendz MyWirelessCard]# TEST=$(ping -c 1 74.125.21.147) [
$TEST >/dev/null 2>&1 ] && echo 1 || echo 0
0
答案1
问题是 pinc-c 1 74.125.21.147 的结果不是一个数字 - 它是带有结果的字符串 - 然后您要检查它是否为空 - 但它永远不会为空,因为无论是否失败它都会报告。
我玩了一下,并稍微修改了一下 - 虽然不太优雅,但对我有用:
TEST=$(ping -c 1 74.125.21.14|wc -l); [ $TEST -gt 5 2>&1 ] && echo 1 || echo 0
这里的想法是,测试现在计算行数。5 行结果表示失败,6 行或更多表示通过。您可以通过增加 ping 次数和计算的行数来使其更加可靠,这也可以解释一定程度的数据包丢失。
还有其他选择 - 例如,不是计算行数,而是可以执行类似 | tail -2 | head -1 | cut -f4 的操作来获取接收到的数据包数。