【发布时间】:2011-09-01 09:57:23
【问题描述】:
我认为这需要更改为 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无关,但是您要通过echo“说”来完成什么?您的介绍性段落暗示您正在尝试执行say命令,如果您只是echo这个词,则不会发生这种情况。 -
@Lawrence,那些是 反引号, 不是引号。他们将执行
say命令并回显其输出。 -
哎呀,错过了很严重;我很抱歉。虽然我仍然不确定那里正在完成什么;
say从不向标准输出输出任何内容。 -
不需要$?在您的解决方案中;如果 ping... 工作正常。此外,您可以通过使用 break: while :; 来避免额外的变量。如果 ping 则执行;然后打破;菲;完成
-
另见:ServerFault: How to ping in linux until host is known?。这似乎有一些非常有希望和简短的答案,它们也适用于 Linux(缺少方便的
-o选项),而不仅仅是具有该选项的 MacO。
标签: bash shell unix while-loop ping