wget - Сохранить только, если код возврата равен 200, в противном случае удалить

У меня есть скрипт, который проверяет мой публичный IP-адрес каждые несколько минут.
Проблема в том, что провайдер иногда дает мне кэшированные страницы (я знаю, что я использовал все связанные аргументы в wget, провайдер сформирован кучкой некомпетентных пользователей, которые, очевидно, сделали свой собственный суперэффективный сервер кэширования) или страницы ошибок, сделанные моим собственным маршрутизатором.
И в результате wget сохраняет страницу ошибки, когда он должен сохранить мой IP-адрес.

РЕДАКТИРОВАТЬ:
что я использую для обнаружения изменений в IP-адресе
http://paste.debian.net/292602/

1 ответ

Решение

Этот фрагмент кода должен указывать правильное направление:

wget --server-response 78.47.35.18/ip-raw.php -O ip-current 2>&1| grep -c 'HTTP/1.1 200 OK'
1
is_200_ok=$(wget --server-response 78.47.35.18/ip-raw.php -O ip-current 2>&1| grep -c 'HTTP/1.1 200 OK')

echo $is_200_ok 
1

Однако я бы использовал Python или Perl для этого. Было бы проще

Как это будет выглядеть в вашем скрипте:

#!/bin/bash

rm -f ip-current /tmp/ip-message-temp
touch ip-old

is_200_ok=$(wget --server-response 78.47.35.18/ip-blabl.php -O ip-tmp 2>&1| grep -c 'HTTP/1.1 200 OK')

if [ $is_200_ok == 1 ]; then
    mv ip-tmp ip-current
    echo "YES"
else
    echo "Got error instead of IP address :("
    exit 1
fi

Также избегайте прямой записи в syslog, гораздо лучше использовать logger:

NAME
 logger — a shell command interface to the syslog(3) system log module
Другие вопросы по тегам