wget с выходом bash errorlevel
Я хочу создать файл bash (.sh) который делает следующее:
Я называю скрипт like ./download.sh www.blabla.com/bla.jpg
сценарий должен Эхо, если файл загружен или нет...
Как я могу это сделать? Я знаю,что могу использовать errorlevel, но я новичок в linux...
спасибо заранее!
3 ответов
обычно приложения в Linux устанавливают значение переменной окружения $? при неудаче. Вы можете изучить этот код возврата и посмотреть, не приведет ли он к какой-либо ошибке для wget.
#!/bin/bash
wget 2>/dev/null
export RC=$?
if [ "$RC" = "0" ]; then
echo OK
else
echo FAILED
fi
вы можете назвать этот скрипт download.sh - ... Измените разрешения на 755 с помощью chmod 755. Назвать его именем файла, который вы хотите скачать. . /download.sh www.google.com
вы можете попробовать что-то вроде:
#!/bin/sh
[ -n ] || {
echo "Usage: [url to file to get]" >&2
exit 1
}
wget
[ $? ] && {
echo "Could not download " | mail -s "Uh Oh" you@yourdomain.com
echo "Aww snap ..." >&2
exit 1
}
# If we're here, it downloaded successfully, and will exit with a normal status
при создании скрипта, который будет (вероятно) вызываться другими скриптами, важно сделать следующее:
- обеспечить аргументацию вменяемости
- отправить по электронной почте, написать в журнал, или сделать что-то еще, чтобы кто-то знает, что пошло не так
на >&2
просто перенаправляет вывод сообщений об ошибках stderror
, что позволяет вызывающему скрипту делать что - то вроде это:
foo-downloader >/dev/null 2>/some/log/file.txt
так как это короткая обертка, нет причин отказываться от немного здравомыслия:)
это также позволяет выборочно направлять вывод wget
до /dev/null
, вы действительно можете захотеть увидеть его при тестировании, особенно если вы получите электронное письмо, в котором говорится, что это не удалось:)
wget выполняется неинтерактивным способом. Это означает, что wget работает в фоновом режиме, и вы не можете поймать код возврата с $?.
одно решение-обрабатывать свойство "--server-response", искать код состояния http 200 Пример:
wget --server-response -q -o wgetOut http://www.someurl.com
sleep 5
_wgetHttpCode=`cat wgetOut | gawk '/HTTP/{ print }'`
if [ "$_wgetHttpCode" != "200" ]; then
echo "[Error] `cat wgetOut`"
fi
Примечание: wget нужно некоторое время, чтобы закончить свою работу, по этой причине я поставил "сон 5". Это не лучший способ сделать, но работал нормально для тестирования решения.