Shell脚本:嵌套for循环只迭代一次

时间:2014-03-28 15:50:00

标签: shell wget

我试图从服务器自动下载多个文件。有一个嵌套的循环结构来传递目录。一个目录中的文件已编号,我只是使用计数器迭代它们。目录缺少所有必需文件的指示是在遇到404时。但是,在这种情况下,if语句中的break语句似乎突破了两个循环。我尝试给出中断1表示只有一个循环要停止,但无济于事。

page=$1
chapStart=$2
chapEnd=$3
k=$2
for i in {$2..$3}
do
        j=1
        while true
        do
                if ((j < 10))
                then
                        pg=0"$j"
                else
                        pg=$j
                fi
                res=$(wget --timeout=10 http://www.somesite.com/content/content/"$page"/"$k"/0"$pg".file)
                if(($? != 0))
                then
                        break 1
                fi
                let ++j
        done
        let ++k
done

遇到时,我需要中断退出while循环。

修改 根据chepner的正确答案,问题出在for循环结构而不是break语句,它的功能相当漂亮。更新后的工作代码是:

page=$1
chapStart=$2
chapEnd=$3
k=$2
for((i=$2;i<=$3;i++));
do
        j=1
        while true
        do
                if ((j < 10))
                then
                        pg=0"$j"
                else
                        pg=$j
                fi
                res=$(wget --timeout=10 http://www.somesite.com/content/content/"$page"/"$k"/0"$pg".file)
                if(($? != 0))
                then
                        break 1
                fi
                let ++j
        done
        let ++k
done

1 个答案:

答案 0 :(得分:1)

你不能在大括号扩展中使用参数扩展。您的外部循环只有一次迭代,i设置为文字字符串{$2..$3}。你应该使用

之一
for ((i=$2; i<=$3; i++)); do

for i in $(seq $2 $3); do

代替。