![如何在 shell 脚本中迭代组合变量](https://linux22.com/image/1631189/%E5%A6%82%E4%BD%95%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E8%BF%AD%E4%BB%A3%E7%BB%84%E5%90%88%E5%8F%98%E9%87%8F.png)
我对 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++))