bash脚本将参数传递给迭代for循环

时间:2018-03-22 22:26:38

标签: bash

我正在编写一个bash脚本来从源代码下载BUNCH数据文件。数据文件都有文件名的数字部分来标识它们的段,如下所示:Filename_blahblah_000000或Filename_blahblah_000024等。

我想打开多个线程,所以我可以并行拉出这些段(大约有4200个)。

这是我的问题:有没有办法可以传递我可以在for循环中调用的输入参数?示例代码如下。

这里的代码是"蛮力"格式。这个特殊的例子将提取3个文件:文件000000,文件000001和文件000002,如下所示:

sr/bin/env bash
(initial non-related stuff)

for i in {0..2}
do
    filenum="00000$i"

    ...blahblahblah

done

结果如下:

% ./data_download-19-x.sh <-- This is the code entered into the command line

Downloading file /blah/file_000000...
(stuff happens)
Downloading file /blah/file_000001...
(stuff happens)
Downloading file /blah/file_000002...
(stuff happens) (done, everybody happy)

但是,我希望能够传入开始和结束参数,所以代码现在看起来像这样:

#!/usr/bin/env bash
(initial non-related stuff)

start=$1
end=$2

for i in {@start..@end} <-- I KNOW THIS IS WHERE THE WRONGNESS IS
do
    filenum="00000$i"

    ...blahblahblah

done

除此之外,最终结果如下:

% ./data_download-19-x.sh 0 2 <-- Notice the 2 input parameters

Downloading file /blah/file{0..2}

Error: Program failed.
Exception: File not found

它将迭代参数解释为文字字符串{0..2},而不是将$ start和$ end作为数字处理。

所以有一种偷偷摸摸的方式让bash将$ start和$ end的值解释为for循环的边界,或者我必须制作一堆不同的文件,并将边界硬编码到其中并执行他们那样?

0 个答案:

没有答案