我想这需要改成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/