bash - 创建一个 shell 脚本来检查网络连接

标签 bash shell

我正在制作一个运行无限循环的简单 shell 脚本,然后如果 ping 命令的输出包含“time”(表明它已成功 ping)它应该回显“已连接!”, sleep 1,然后清除。但是,我的脚本没有输出。

#!/bin/bash
while :
do
    if [[ $(ping google.com) == *time* ]]; 
    then
        echo -en '\E[47;32m'"\033[1mS\033[0m"
        echo "Connected!"
    else
        echo -en '\E[47;31m'"\033[1mZ\033[0m"
        echo "Not Connected!"
    fi
    clear
    sleep 1
done

最佳答案

您的脚本没有给出输出,因为 ping 永远不会终止。要让 ping 测试您的连接性,您需要为其提供运行计数 (-c) 和响应超时 (-W ), 然后检查它的返回码:

#!/bin/bash
while true
do
    if ping -c 1 -W 5 google.com 1>/dev/null 2>&1 
    then
        echo "Connected!"
        break
    else
        echo "Not Connected!"
        sleep 1
    fi
done

ping 如果能够成功 ping 给定的主机名,将返回 0,否则返回非零值。

还值得注意的是,此循环的迭代将运行不同的时间段,具体取决于 ping 是快速成功还是失败,例如由于没有网络连接。您可能希望使用 timesleep 将迭代保持恒定的时间长度(例如 15 秒)。

关于bash - 创建一个 shell 脚本来检查网络连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32384417/

相关文章:

bash - 选项需要参数错误

bash - 无法让 bash 脚本用 expect 回答提示

bash - 如何将 yaml 文件读入 bash 关联数组?

bash - 批量复制和重命名多个文件

Linux命令。复制文件一百次

linux - 通过 delim 将字符串拆分为数组时不包含最后一个空字符串

linux - -bash : fork: Cannot allocate memory

arrays - 从文本文件创建和索引数组

c++ - Qt toBase64 和 Linux base64 的区别

shell - 如何将在 emacs *shell* 缓冲区内运行的进程更改为后台