Bash脚本在执行测试之前检查HTTP状态

时间:2018-06-22 14:43:42

标签: bash shell

嗨,我仅在应用程序启动且正在运行时才尝试执行特定的测试(我正在使用docker),我试图借助bash脚本来实现这一目标。我期望的是我需要运行一个循环,直到收到来自应用程序的200个状态,一旦收到200个脚本,就应该继续执行测试。我正在尝试bash脚本,如下

#!/bin/bash
urlstatus=0
until [ $urlstatus -ne 200 ]; do
urlstatus=$(curl -o /dev/null --silent --head --write-out '%{http_code}' "http://localhost:8000/animals")
echo $urlstatus
done

如果应用程序已启动并正在运行,请执行测试

请让我知道脚本中缺少什么。

谢谢

1 个答案:

答案 0 :(得分:0)

-ne与您实际想要的测试完全相反;循环直到退出状态为200,您应该拥有-eq,甚至更好(如果存在非数字值,则避免比较时出现错误消息)=

#!/bin/sh
fetchstatus() {
  curl \
    -o /dev/null \
    --silent \
    --head \
    --write-out '%{http_code}' \
    "http://localhost:8000/animals"
}

urlstatus=$(fetchstatus)          # initialize to actual value before we sleep even once
until [ "$urlstatus" = 200 ]; do  # until our result is success...
  sleep 1                         # wait a second...
  urlstatus=$(fetchstatus)        # then poll again.
done

但是由于curl可以调整其退出状态以指示请求是否成功,所以您甚至不需要它。使用--fail,您可以直接分支:

#!/bin/sh
while :; do
  curl -sS --fail -o /dev/null "http://localhost:8000/animals") && break
  sleep 1 # actually give your server a little rest
done

&& break意味着我们只有在请求成功的情况下才跳出循环。 --fail参数curl表示只有在服务器返回了非错误的退出状态(例如200)时,它才会返回成功。

相关问题