用于检查互联网连接不工作的 Linux bash 脚本

标签 linux bash grep connection ping

我想在我的树莓派上使用 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/

相关文章:

c - 在从客户端发送任何消息之前,无法将消息从服​​务器端打印到客户端

java - 具有编程身份验证的 SVN 服务器

regex - 删除除 () 包围之外的所有内容

linux - 突出显示类似于 grep 的文本,但不过滤掉文本

regex - 在 Windows 命令行的 Grep 中使用正则表达式

regex - 如何仅对包含大写字母的单词进行grep

linux - 我可以在 Linux 2.6 中使用多少个 pthread_rwlock

linux - 使用perl cgi在网页上显示命令输出

linux - 在 shell 中调用 Property 的正确语法是什么

linux - 我如何绑定(bind)C-?在狂欢中?