Bash ping 成功的程序

Bash ping 成功的程序

我认为需要将其改为 while 循环,因为目前它会等待所有 10000 次 ping 完成。我需要它在 ping 成功时返回。您有什么建议?

#!/bin/bash
echo begin ping
if ping -c 100000 8.8.8.8 | grep timeout;
then echo `say timeout`;
else echo `say the internet is back up`;
fi

答案1

如果您想让它不断检查,并根据状态执行不同的操作,那么您是对的,while 循环可能是更好的选择。有很多方法可以实现这一点,下面是我想出的一个简单的示例,当然需要修改,但可以作为一个开始。

#!/bin/bash
PING="/bin/ping -q -c1"
HOST=www.google.com
WAITTIME=3

while [ true ]
do
        ${PING} ${HOST}
        if [ $? -ne 0 ]; then
                echo "Link is down"
        fi
        sleep $WAITTIME 
done

这是一个无限循环,因为true总是等于 true。所以它会一直运行,直到你跳出它。每次循环时,它都会 ping 变量配置的任何主机 1 次,然后检查$?最后一个命令的返回值。如果该值不为 0,则 ping 失败,并且假设链接已断开。然后它会暂停一段时间(在本例中为 3 秒)并再次尝试,因为 true 仍然为真。

答案2

尝试这个:

#!/bin/bash
while :; do
    ping -c 1 8.8.8.8 >/dev/null 2>&1
    if [ $? = 0 ]; then
        break
    else
        echo timeout
    fi
    sleep 1
done
echo the internet is back up

如果您想使用“say”,您只需用“echo”更改行即可。

相关内容