@whitest
Развивающийся сисадмин

Как загрузить ответ curl или wget в переменную и сравнить в условии?

Нужно "перехватить" ответы от веб-серверов и назначить свои "красивые" ответы ошибок.
Делаю так:
request=`curl -Is -u $2:$3 $1 | head -1`
if [[ "$request" == *200* ]]
then
echo "Everything is OK!"
echo "Everything is OK!" >> ./script.log
fi

if [[ "$request" == *403* ]]
then 
echo "ERROR: Cannot connect to $1: 403"
echo "ERROR: Cannot connect to $1: 403" >> ./script.log && exit
fi

С wget то же самое:
request=`wget -q --user=$2 --password=$3 $1 | head -1`


То есть ответы от серверов нормально ищутся, в переменную складываются, условия соблюдаются, мои красивые сообщения получаются.

Но если сайт не резолвится, ответ от самого curl или wget перехватить не получается.
То есть я смотрю, что реально отвечает curl, пишу какую-нибудь ключевую фразу оттуда, но ничего не срабатывает. В случае с wget тоже.

if [[ "$request" == *error* ]] # - где error это предполагаемое содержимое заголовка
then 
echo "ERROR: Cannot connect to $1: site $1 doesn't exist"
echo "ERROR: Cannot connect to $1: site $1 doesn't exist" >> ./script.log && exit
fi


Что я делаю не так?

UPD:
Попробовал потестировать переменную с ping, то же самое. Что-то тут в корне неверно, но я не могу понять что.
request1=`ping -q -c 1 $1 | /dev/null`

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

wget $1 2>/dev/null 
export RC=$? 
if [ "$RC" = "0" ]; 
then echo $1 OK 
else echo $1 FAILED 
fi


Если написать именно в таком порядке, чтобы условие шло сразу после выполнения команды, то всё прекрасно работает, задача решена.
  • Вопрос задан
  • 828 просмотров
Пригласить эксперта
Ответы на вопрос 1
@frees2
print_r
Читать заголовок и перерабатывать его как хочется
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы