如何检查 curl 的 http_code 是否在 200 到 299 之间

Tom*_*ski 1 regex linux bash curl

我想测试一个网站,直到它返回 200 到 299 之间的 http_code:

  until [[ $(curl --silent -o /dev/null -w %{http_code} -u admin:admin http://mywww:8080/api/v1) = "2[0-9][0-9]" ]] ;do
    printf '.'
    sleep 5
done
Run Code Online (Sandbox Code Playgroud)

但它只是继续循环,即使 curl 返回 202 例如。在与正则表达式进行比较时,我尝试将 = 替换为 -eq,但随后会引发错误

[[: 2[0-9][0-9]: 语法错误:算术运算符无效(错误标记为“[0-9][0-9]”)

Far*_*ahi 5

尝试这个:

until [[ $(curl -I --silent -o /dev/null -w %{http_code} -u admin:admin http://mywww:8080/api/v1) =~ 2[0-9][0-9]  ]] ;do
    printf '.'
    sleep 5
done
Run Code Online (Sandbox Code Playgroud)

-I: 做一个 head 而不是 get。如果不被网络服务器阻止,效率会更高。

=~ 2[0-9][0-9]: Equal Tilde 运算符,允许在 if 语句中使用正则表达式。

旁注:如果你不想使用相等的波浪号,你应该失去模式上的 qoutes。

  • 你真的不需要正则表达式匹配,`=` 可以很好地用于模式匹配,但模式必须不加引号。 (2认同)