wget with errorlevel bash output

时间:2010-11-07 17:33:34

标签: linux bash centos

我想创建一个执行以下操作的bash文件(.sh):

我将脚本称为./download.sh www.blabla.com/bla.jpg

如果文件已下载,脚本必须回显...

我该怎么做?我知道我可以使用errorlevel,但我是linux的新手......

提前致谢!

3 个答案:

答案 0 :(得分:6)

Linux中的应用程序通常会设置环境变量$的值?失败了。您可以检查此返回代码,看看它是否为您带来了wget的任何错误。

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

您可以将此脚本命名为download.sh。使用chmod 755将权限更改为755.使用您要下载的文件的名称调用它。 ./download.sh www.google.com

答案 1 :(得分:3)

您可以尝试以下方式:

#!/bin/sh

[ -n $1 ] || {
    echo "Usage: $0 [url to file to get]" >&2
    exit 1
}

wget $1

[ $? ] && {
  echo "Could not download $1" | 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,您可能真的希望在测试时看到它,特别是如果您收到一封电子邮件说它失败了:)

答案 2 :(得分:0)

wget以非交互方式执行。这意味着wget在后台工作,你无法用$ ?.

来捕获de return代码

一个解决方案是处理“--server-response”属性,搜索http 200状态代码 例如:

wget --server-response -q -o wgetOut http://www.someurl.com
sleep 5
_wgetHttpCode=`cat wgetOut | gawk '/HTTP/{ print $2 }'`
if [ "$_wgetHttpCode" != "200" ]; then
    echo "[Error] `cat wgetOut`"
fi

注意:wget需要一些时间来完成他的工作,因此我把“睡5”。这不是最好的方法,但可以测试解决方案。