我想在我的树莓派上使用 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
关于用于检查互联网连接不工作的 Linux bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55385534/