当wget返回错误404时如何恢复循环 - Bash

时间:2015-04-18 21:36:10

标签: linux bash wget

我正在尝试编写一个简单的脚本来为我下载文件,但我不知道确切的网址。在url的中间有一个id我要增加,直到我真正得到正确的id。问题是起点不正确,wget返回404错误,然后循环不会继续。

如何让循环再次使用新ID?

这是我的代码:

#!/bin/sh

id=7887902
urla="https://firsthalfofurl"
urlb="secondhalfofurl.pdf"

url=$urla$id$urlb

for i in {1..5};
do
    wget --user uname --password pass $url;
    id=$((id+1));
    url=$urla$id$urlb
done

我也尝试添加||在wget命令中的$ url之后为true,但这不起作用。

3 个答案:

答案 0 :(得分:0)

试试这个:

wget --user uname --password pass $url || true;

这样,如果wget失败,该行的结果仍为零,并且脚本继续。

答案 1 :(得分:0)

好的,我找到了解决方案。它并不完美,因为结果是无限循环,只能通过ctrl -c终止。这是我的新代码。

#!/bin/sh


id=8057270
urla="firsthalfofurl"
urlb="secondhalfofurl.pdf"

checka="$(ls -l | wc -l)"
checkb="$(ls -l | wc -l)"
url=$urla$id$urlb
update () {
    id=$((id+1));
    url=$urla$id$urlb;
    checkb="$(ls -l | wc -l)";
}


yes () {

    #check to see if the number of files in the folder has increased.
    if [ $checkb -gt $checka ]; then
        #this will show up on every successive loop so if I let it run overnight I will know if the file has been found. Not really necessary.
        sleep 3;
        echo File Found;
        sleep 1;
    fi;
    update;

    wget --user username --password pass $url;
    trap yes EXIT
    yes
}

yes

答案 2 :(得分:-1)

您应该对所有$url的内容进行双重引用。由于我们无法看到first-secondhalfofurl是什么,因此可能存在破坏您命令的关键字符。

E.g。

wget --user uname --password pass "$url"