0

我试图弄清楚如何让我的 bash 脚本工作。我有以下命令:

curl http://192.168.1.2/api/queue | grep -q test

我需要它重复,直到管道中的第一个命令成功(意味着服务器响应)并且第二个命令失败(意味着找不到模式或队列为空)。我尝试了许多组合,但似乎无法得到它。我看着使用$PIPESTATUS,但无法让它按我想要的方式循环运行。我已经尝试了各种变化,但无法让它发挥作用。这是我目前正在尝试的:

while [[ "${PIPESTATUS[0]}" -eq 0 && "${PIPESTATUS[1]}" -eq 1 ]]
  do curl http://192.168.1.2 | grep -q regular
  echo "The exit status of first command ${PIPESTATUS[0]}, and the second command ${PIPESTATUS[1]}"
  sleep 5 
done
4

2 回答 2

0

虽然不清楚 curl 调用返回什么样的输出,但也许你正在寻找这样的东西:

curl --silent http://192.168.1.2 |while read line; do
  echo $line |grep -q regular || { err="true"; break }
done

if [ -z "$err" ]; then
  echo "..All lines OK"
else
  echo "..Abend on line: '$line'" >&2
fi
于 2016-10-04T20:19:51.827 回答
0

弄清楚了。只是不得不重新概念化它。我无法用 while 或 until 循环严格地弄清楚它,但是创建一个无限循环并在满足条件时打破它。

while true
    do curl http://192.168.1.2/api/queue | grep -q test
        case ${PIPESTATUS[*]} in
          "0 1")
              echo "Item is no longer in the queue."
              break;;
          "0 0")
              echo "Item is still in the queue. Trying again in 5 minutes."
              sleep 5m;;
          "7 1")
              echo "Server is unreachable. Trying again in 5 minutes."
              sleep 5m;;
          esac
   done
于 2016-10-04T23:36:22.230 回答