我想从1945年到2020年使用循环从URL下载数据文件,URL中只有一个数字更改,URL如下所示https://www.metoc.navy.mil/jtwc/products/best-tracks/1945/1945s-bio/bio1945.ziphttps://www.metoc.navy.mil/jtwc/products/best-tracks/1984/1984s-bio/bio1984.ziphttps://www.metoc.navy.mil/jtwc/products/best-tracks/2020/2020s-bio/bio2020.zip
我尝试了以下代码,但它抛出了一个错误
for i in {1945..2020}
do
wget "https://www.metoc.navy.mil/jtwc/products/best-tracks/$i/$is-bio/bio$i.zip"
done
我确实稍微更改了您的代码
for i in {1945..1947}
do
echo "https://www.metoc.navy.mil/jtwc/products/best-tracks/$i/$is-bio/bio$i.zip"
done
当运行时,它确实输出
https://www.metoc.navy.mil/jtwc/products/best-tracks/1945/-bio/bio1945.zip
https://www.metoc.navy.mil/jtwc/products/best-tracks/1946/-bio/bio1946.zip
https://www.metoc.navy.mil/jtwc/products/best-tracks/1947/-bio/bio1947.zip
请注意,第一个不是您可能预期的https://www.metoc.navy.mil/jtwc/products/best-tracks/1945/1945s-bio/bio1945.zip
——第二个$i
没有按预期工作,因为它后面是s
——它被理解为未定义的变量is
。将变量名封装在{
}
中以避免混淆,此代码为
for i in {1945..1947}
do
echo "https://www.metoc.navy.mil/jtwc/products/best-tracks/${i}/${i}s-bio/bio${i}.zip"
done
运行时输出
https://www.metoc.navy.mil/jtwc/products/best-tracks/1945/1945s-bio/bio1945.zip
https://www.metoc.navy.mil/jtwc/products/best-tracks/1946/1946s-bio/bio1946.zip
https://www.metoc.navy.mil/jtwc/products/best-tracks/1947/1947s-bio/bio1947.zip
这和你举的例子是一致的。现在,您可以使用wget
替换echo
,或者使用echo
将代码输出保存到名为urls.txt
的文件中,然后使用wget
的-i
选项,如下所示
wget -i urls.txt
注:为了简洁起见,我使用1945..1947
代替1945..2020
它直接起作用了,谢谢@Daweo
for i in {1945..2020}
do
wget "https://www.metoc.navy.mil/jtwc/products/best-tracks/${i}/${i}s-bio/bio${i}.zip"
done