我试图从服务器自动下载多个文件。有一个嵌套的循环结构来传递目录。一个目录中的文件已编号,我只是使用计数器迭代它们。目录缺少所有必需文件的指示是在遇到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
答案 0 :(得分:1)
你不能在大括号扩展中使用参数扩展。您的外部循环只有一次迭代,i
设置为文字字符串{$2..$3}
。你应该使用
for ((i=$2; i<=$3; i++)); do
或
for i in $(seq $2 $3); do
代替。