curl: как вернуть 0, если статус 200? - PullRequest
0 голосов
/ 14 сентября 2018

Как я могу вернуть 0, когда статус ответа 200?

Прямо сейчас я могу получить статус, например, 200 с помощью следующей команды:

curl -LI http://google.com -o /dev/null -w '%{http_code}\n' -s

Но мне нужно повернуть эти 200 в ответ 0.

Как мне этого добиться? Я попробовал следующую команду, но она не возвращает

if [$(curl -LI http://google.com -o /dev/null -w '%{http_code}\n' -s) == "200"]; then echo 0

Ответы [ 4 ]

0 голосов
/ 09 августа 2019

Вы также можете использовать параметр -f :

(HTTP) Ошибка молча (вообще не выводится) при ошибках сервера. В основном это делается для того, чтобы лучше включать скрипты и т. Д., Чтобы лучше справляться с неудачными попытками.

Итак:

curl -f -LI http://google.com

Вернет статус 0, если вызов был успешным.

0 голосов
/ 14 сентября 2018

Другой способ - использовать логический оператор &&:

[ $(curl -LI http://google.com -o /dev/null -w '%{http_code}\n' -s) == "200" ] && echo 0

Вторая команда будет выполнена, только если первая часть - True.

0 голосов
/ 19 сентября 2018

Самый простой способ - проверить код выхода curl.

$ curl --fail -LI http://google.com -o /dev/null -w '%{http_code}\n' -s > /dev/null
$ echo $?
0
$ curl --fail -LI http://g234234oogle.com -o /dev/null -w '%{http_code}\n' -s > /dev/null
$ echo $?
6

Обратите внимание, что --fail здесь необходимо ( подробности в этом ответе ).Также обратите внимание, как указано Бобом в комментариях (см. Сноску) , что в случае не 200 кода успеха это все равно вернет 0.

Если вы не хотите использовать это по какой-либо причине, вот другой подход:

http_code=$(curl -LI http://google.com -o /dev/null -w '%{http_code}\n' -s)
if [ ${http_code} -eq 200 ]; then
    echo 0
fi

Причина, по которой ваш код не работает, заключается в том, что у вас есть для добавления пробелов в скобках.

(скопировано из моего ответа на SuperUser, где OP перекрестно разместил к удаленному вопросу)

0 голосов
/ 14 сентября 2018

Похоже, вам нужны пробелы и fi.Это работает для меня:

if [ $(curl -LI http://google.com -o /dev/null -w '%{http_code}\n' -s) == "200" ]; then echo 0; fi
...