2017-02-17 1 views
1

Я хотел бы проверить веб-сайт, пока он не вернется с HTTP_CODE между 200 и 299:Как проверить, если HTTP_CODE Curl находится между 200 и 299

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 

Но это только продолжает цикл, даже если ротор возвращается 202 для пример. Я попытался подставляя = с -eq, когда по сравнению с регулярным выражением, но тогда он выдает ошибку

[[: 2[0-9][0-9]: syntax error: invalid arithmetic operator (error token is "[0-9][0-9]")

+0

не уверен относительно остальных команд, но для соответствия регулярному выражению используйте '= ~ 2 [0-9] [0-9]' – Sundeep

+0

Для соответствия шаблону вы должны * не * указать правую часть. –

ответ

4

Попробуйте это:

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 

-I: Сделайте голову вместо ГЭТ. Гораздо эффективнее, если не заблокирован веб-сервером.

=~ 2[0-9][0-9]: Оператор Equal Tilde, который позволяет использовать регулярное выражение в выражении if.

Примечание: Если вы не хотите использовать равную тильду, вы должны потерять qoutes на шаблоне.

+2

Вам не нужно сопоставлять регулярные выражения, '=' отлично работает с совпадением шаблонов, но шаблон должен быть некорректным. –

+0

Спасибо за информацию, обновил ответ. –