直到循环,但是如果在5分钟后失败,如何超时

时间:2018-11-02 07:04:01

标签: linux bash shell scripting

我有2个,直到在bash中出现:

until grep "1" /var/tmp/machineip > /dev/null;
do
    nova list --name spawningtestwin|grep spawningtestwin|awk -F= '{print $2}'|awk '{print $1}'|sed 's/ //g' > /var/tmp/machineip
done

mip=$(cat /var/tmp/machineip)
until ping -c1 $mip &>/dev/null; do :; done

我该如何限制到5分钟?如果5分钟后仍无反应,则应停止。

2 个答案:

答案 0 :(得分:1)

TIMEOUT = 0;直到ping -c1 $ mip&> / dev / null ||测试“ $ TIMEOUT” -gt“ $((5 * 60))”;做:;睡觉1;超时= $(((超时+1));完成

您可以将5更改为您想要的分钟数。

答案 1 :(得分:1)

timeout可能是一个不错的选择,但是由于您尝试运行循环,因此可能需要比您想要的语法更多的语法。如果那是您的首选,我相信我们可以举一个例子。

如果您想用老式的方法做...

declare -i now start=$(date +%s) # linux epoch timestamp in seconds
timeout=300                      # 300s = 5m
until grep -q "1" /var/tmp/machineip 
do now=$(date +%s)               # linux epoch timestamp in seconds
   if (( ( now - start ) < timeout )) # less than 5m
   then nova list --name spawningtestwin |
          awk -F= '/spawningtestwin/ {
             gsub(/ +//,"",$2);
             print $2
          }'                             > /var/tmp/machineip
          sleep 20
   else echo taking too much time.
        exit 1
   fi
done 

awk不是我的堡垒。你们请在这方面检查我...

特别是awk -F= '{print $2}'|awk '{print $1}'对我来说毫无意义。在 general 中,每当对awksed和/或grep进行多次 simple 调用时,这使我认为他们可以被淘汰。