Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 只有ping关闭时,Bash才会继续_Linux_Bash_Loops_If Statement - Fatal编程技术网

Linux 只有ping关闭时,Bash才会继续

Linux 只有ping关闭时,Bash才会继续,linux,bash,loops,if-statement,Linux,Bash,Loops,If Statement,我正在尝试创建一个脚本,该脚本仅在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 我觉得上面的这个非常接近,因为

我正在尝试创建一个脚本,该脚本仅在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命令并继续。 这是我在上面找到的东西,但根本无法工作

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"
试试这个:

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 ]
如果ping在x秒后超时而没有任何响应,那么如果您愿意执行某项操作,则可以将其全部压缩(在下面的示例中为10秒):


这有几个问题: 首先,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 ]
如果ping在x秒后超时而没有任何响应,那么如果您愿意执行某项操作,则可以将其全部压缩(在下面的示例中为10秒):


运行第二个版本时具体会发生什么?你收到错误信息了吗?他们怎么说?看看我对你的脚本提出的建议,看看你是否喜欢压缩表单(它发送一个ping-ant等待10秒的响应)。当你运行第二个版本时具体会发生什么?你收到错误信息了吗?他们怎么说?看看我对你的脚本提出的建议,看看你是否喜欢压缩的表单(发送一个ping-ant等待10秒的响应)。谢谢你,因为这达到了我的要求!谢谢你,因为这达到了我所需要的!啊,谢谢你把上面的观点说出来!你可以看出我是个新手。由于阿尔夫的解决方案对我有效,我将坚持下去。非常感谢您的帮助。如果您认为这是一个好答案,请将其标记为有用的答案。。。这也有助于提高我的声誉;)我们都曾经是新手:谢谢你把上面的观点说出来!你可以看出我是个新手。由于阿尔夫的解决方案对我有效,我将坚持下去。非常感谢您的帮助。如果您认为这是一个好答案,请将其标记为有用的答案。。。这也有助于提高我的声誉;)我们都曾经是新手:D