Нужно "перехватить" ответы от веб-серверов и назначить свои "красивые" ответы ошибок.
Делаю так:
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
Если написать именно в таком порядке, чтобы условие шло сразу после выполнения команды, то всё прекрасно работает, задача решена.