创建shell脚本以检查网络连接

时间:2015-09-03 19:58:07

标签: bash shell

我制作一个运行无限循环的简单shell脚本,然后如果ping命令的输出包含" time" (表示它已成功ping通)它应该回显"连接!",睡眠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

1 个答案:

答案 0 :(得分:5)

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

#!/bin/bash
while true
do
    if ping -c 1 -W 5 google.com 1>/dev/null 2>&1 
    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给定主机名,则返回0,否则返回非{零}。

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