Проверка, находится ли строка в ответе команды

Я борюсь с проблемой в Linux Bash.
Я хочу, чтобы скрипт выполнял команду

curl -s --head http://myurl/ | head -n 1

и если результат команды содержит 200, он выполняет другую команду. Иначе это что-то повторяет. Что у меня сейчас:

CURLCHECK=curl -s --head http://myurl | head -n 1
            if [[ $($CURLCHECK) =~ "200" ]]
            then
            echo "good"
            else
            echo "bad"
            fi

Скрипт печатает:

HTTP/1.1 200 OK
bad

Я пробовал много способов, но ни один из них, кажется, не работает. Кто-нибудь может мне помочь?

4 ответа

Решение

Я бы сделал что-то вроде этого:

if curl -s --head http://myurl | head -n 1 | grep "200" >/dev/null 2>&1; then
    echo good
else
    echo bad
fi

Вы можете использовать эту команду curl с -w "%{http_code}" просто получить http код статуса:

[[ $(curl -s -w "%{http_code}" -A "Chrome" -L "http://myurl/" -o /dev/null) == 200 ]] &&
      echo "good" || echo "bad"

Используя wget

 if wget -O /dev/null your_url 2>&1 | grep -F HTTP >/dev/null 2>&1 ;then echo good;else echo bad; fi

Вам нужно на самом деле захватить вывод команды curl:

CURLCHECK=$(curl -s --head http://myurl | head -n 1)

Я удивлен, что вы не получаете ошибку "-s: команда не найдена"

Другие вопросы по тегам