繁体   English   中英

仅当ping失败时,Bash才会继续

[英]Bash continue only if ping is down

我正在尝试创建一个仅在ping无响应时才继续的脚本。

我遇到了两个主要问题。 一个问题是它将需要2个CTL-C命令来结束脚本,而另一个问题是该脚本将永远不会结束并且需要终止。

这是我的尝试;

rc=0
until [ $rc -gt 0 ]
do
      ping 69.69.69.69 > /dev/null 2>&1
      rc=$?
done

## Here will be the rest of code to be executed

我觉得上面的这个非常接近,因为它需要2个CTL-C命令并继续。 这是我在SO上找到的东西,但根本无法工作。

counter=0
while [ true ]
do
  ping -c 1 69.69.69.69 > /dev/null 2>&1
    if [ $? -ne 0 ] then
        let "counter +=1"
    else
        let "counter = 0"
    fi
    if [ $counter -eq 10 ] then
        echo "Here should be executed once pinging is down"
    fi
done

非常感谢您的协助,谢谢。

尝试这个:

while ping -c 1 -W 20 "$host" >& /dev/null
do
  echo "Host reachable"
  sleep 10  # do not ping too often
done
echo "Host unreachable within 20 seconds"

有几个问题:首先,if语句错误使用此格式

if [ $? -ne 0 ] then;

或其他格式

if [ $? -ne 0 ]
then

其次,我怀疑您的ping是否超时

ping -c 1 -w 2 69.69.69.69 > /dev/null 2>&1

可能会有所帮助

第三,即使在10点之后,循环也将继续递增计数器。您可能要在10点之后退出

while [ $counter -le 10 ]

如果您对在x秒后ping超时而没有任何响应的执行某件事感到满意,则可以将其全部压缩(在下例中为10秒):

ping -c 1 -w 10 69.69.69.69 >/dev/null 2>&1 || echo "run if ping timedout without any response"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM