我想这需要改成while子句,目前它要等到10000个ping都完成了,我需要它在ping成功时返回。程序“say”在OSX上,它使计算机说话。

#!/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

好吧,我没有权利回答我自己的问题,所以在玩了一会儿之后,我的答案是:
谢谢,是的,我不知道$?直到现在。不管怎样,现在我已经去做了这个。我喜欢你的不去永远,但在我的情况下,我不需要它停止,直到它完成。
#!/bin/bash
intertube=0
echo "begin ping"
while [ $intertube -ne 1 ]; do
        ping -c 3 google.com
        if [ $? -eq  0 ]; then
                echo "ping success";
                say success
                intertube=1;
        else
                echo "fail ping"
        fi
done
echo "fin script"

最佳答案

您可能不应该依赖命令的文本输出来决定这一点,特别是当ping命令gives you a perfectly good return value时:
如果从指定的主机听到至少一个响应,ping实用程序返回零状态,如果传输成功但没有收到响应,则有两个状态;如果发生错误,则从“cc>另一个值。
换言之,使用类似于:

((count = 100))                            # Maximum number to try.
while [[ $count -ne 0 ]] ; do
    ping -c 1 8.8.8.8                      # Try once.
    rc=$?
    if [[ $rc -eq 0 ]] ; then
        ((count = 1))                      # If okay, flag to exit loop.
    fi
    ((count = count - 1))                  # So we don't go forever.
done

if [[ $rc -eq 0 ]] ; then                  # Make final determination.
    echo `say The internet is back up.`
else
    echo `say Timeout.`
fi

关于bash - Bash循环ping成功,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6118948/

10-13 22:47