BASH - 如果发送 curl post 请求服务器 returns 出现意外结果,如何在继续执行之前强制休眠 300 秒

BASH - how to force sleep of 300s before continuing the execution, if upon sending a curl post request the server returns an unexpected result

@Socowi 指导我完美解决,你可以在问题的底部看到它:

(1) 这是一个实际的脚本示例,其内容包含 10 个 curl POST 请求,每个请求都会在我的网站上发布不同的评论。

#!/bin/bash

curl "https://mywebsite.com/comment... ...&text=Test-1"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-2"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-3"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-4"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-5"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-6"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-7"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-8"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-9"; sleep 60;
curl "https://mywebsite.com/comment... ...&text=Test-10"; sleep 60;

(2) 当一切顺利时,终端如下所示:

(3) 问题: 在随机的时间间隔内会出现问题,而不是上面屏幕截图中显示的内容,我将开始收到大量包含“出现问题的文本错误”。例如,它可以很好地执行前 6 个 curl 命令,而在第 7 个将出现错误响应......脚本继续执行,并运行第 8 个 curl 命令并在终端中显示相同的错误, 脚本一直持续到最后让我完成了部分工作。

(4) 所需的解决方案: 我只希望脚本在终端中抛出类似错误时 pause/wait 300 秒,然后再继续 运行 下一个卷曲脚本中的行命令。等待确实有帮助,但我现在必须手动完成。请帮助我解决如何正确修改我的脚本以实现相同的目的。

谢谢!

编辑:我的问题的解决方案,感谢@Socowi:

#!/bin/bash 
for i in {1..10}; do
  if curl "https://mywebsite.com/comment... ...&text=Test-$i" | grep -qF '"status":"ERROR"'; then
    sleep 300  # there was an error
  else
    sleep 60  # no error given
  fi
done

exec $SHELL

通常您可以使用if curl ...来检查退出状态并相应地调整休眠时间。但是,在您的情况下 curl 成功获得回复。 curl不关心回复的内容,但是你可以自己查看内容。在您的情况下,json 的工具将是解析响应的正确方法,但 hacky grep 也可以完成这项工作。
因为你想打印响应到终端,我们使用一个变量,这样我们就可以打印响应 使用 grep 就可以了。

#!/bin/bash 
for i in {1..10}; do
  response=$(curl "https://...&text=Test-$i")
  echo "$response"
  if grep -qF '"status":"ERROR"' <<< "$response"; then
    sleep 300 # there was an error
  else
    sleep 60  # everything ok
  fi
done