我想创建一个执行以下操作的bash文件(.sh):
我将脚本称为./download.sh www.blabla.com/bla.jpg
如果文件已下载,脚本必须回显...
我该怎么做?我知道我可以使用errorlevel,但我是linux的新手......
提前致谢!
答案 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”。这不是最好的方法,但可以测试解决方案。