如何在 shell 脚本中迭代组合变量

如何在 shell 脚本中迭代组合变量

我对 shell 脚本还不熟悉

file1='/home/ashish/Desktop/wipro/NSE_F_CMN_ORDTRD_08052020_01_01.csv.gz'

file2='/home/ashish/Desktop/wipro/NSE_F_CMN_ORDTRD_08052020_01_02.csv.gz'

a=1

while [ $a -lt 3 ]

do

    b="file$a"
    echo $b
    cksum $b
    a=`expr $a + 1`

done

我想迭代文件 1 和文件 2,但出现错误“没有这样的文件或目录”

答案1

如果你想迭代你的文件,有更简单的方法:

直接迭代文件列表:

您可以迭代使用模式获得的文件列表,这通常是最好的方法:

for file in /home/ashish/Desktop/wipro/NSE_F_CMN_ORDTRD_08052020_01_??.csv.gz
do
    cksum $file
done

请注意,如果通配符(“*”和“?”)位于引号字符串中,则不会显示,因此如果您需要引用文件名(例如,因为它们可以包含空格),那么您必须删除通配符:

for file in "/home/ashish/Desktop/wipro/NSE_F_CMN_ORDTRD_08052020_01_"??".csv.gz"
do
    cksum $file
done

生成数字序列,然后对其进行迭代

您可以创建一个数字列表,然后将这些数字替换为文件名。如果您事先知道这些数字,则可以使用括号扩展来生成列表:

for i in {00..04}
do
    file="/home/ashish/Desktop/wipro/NSE_F_CMN_ORDTRD_08052020_01_${i}.csv.gz"
    cksum "$file"
done

您还可以使用括号扩展直接生成文件名:

for file in "/home/ashish/Desktop/wipro/NSE_F_CMN_ORDTRD_08052020_01_"{01..03}".csv.gz"
do
    cksum "$file"
done

如果在编写代码时不知道开始和停止值(这些数字在变量中),您可以使用它seq来生成列表(-f参数在左侧用零填充数字):

for i in $(seq -f "%02.0f" 1 4) 
do
    cksum "/home/ashish/Desktop/wipro/NSE_F_CMN_ORDTRD_08052020_01_${i}.csv.gz"
done

如果你想自己计算序列,在 bash 中你可以使用以下命令增加数字:

((a++))

相关内容