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". Это не лучший способ сделать, но работал нормально для тестирования решения.