0

我有一个while循环,它试图为一个术语卷曲一个网络链接。我需要在其中添加一个“或”,这样我就可以计算一段时间,这样如果页面永远不会出现,它就不会不要无限期地拖延脚本。这是我所拥有的,这是行不通的。

count=0
while [ $count -lt 5 -o `curl -silent -m 2 10.10.10.10:7001 | grep myterm | wc -l` -lt 1 ]; do 
echo "Waiting for it to start" 
count=$(($count + 1))
sleep 5
done
echo "started"

我知道我的 curl 工作并在页面打开时返回 1,并且计数部分工作正常,如果它循环 5 次,它会结束 while 循环并说开始(不是我离开它的方式,只是一个例子)。然而第一次运行时,它应该看到我的 curl = 1,不小于 1,然后结束 while 循环。我做错了什么??

编辑:解释我为什么这样做,所以有人可以解释为什么这是不好的做法/该怎么做。

我正在启动一个 jboss 服务。此服务可能需要 3 到 6 分钟才能启动。所以我需要做两件事。检查状态页面是否出现(判断它何时成功启动的最佳方式),如果出现超过 8 分钟,则停止检查,以便它可以继续下一个服务。想法?

4

1 回答 1

1

你要做的是在你还没有尝试 5 次的时候继续尝试,但它失败了。但你没有写。

count=0
nb=0
while [ $count -lt 5 ]; do 
  nb=$(curl -silent -m 2 10.10.10.10:7001 | grep myterm | wc -l)
  if [ $nb -ge 1 ]; then
    echo "Started"
    exit 0
  fi
  echo "Waiting for it to start..." 
  count=$(($count + 1))
  sleep 5
done
echo "Didn't start after $count tries"
exit 1
于 2013-10-30T17:16:16.160 回答