在bash中定义循环的起点和终点

在bash中定义循环的起点和终点

我有一个目录,其中的文件夹按顺序编号为 1-1000,但是我想对此目录中的某些文件夹执行操作。即文件夹1-50。如何定义循环的起点和终点?

到目前为止,我有一个这样的脚本:

a=1
b=1

for i in ~/PATH/*/ ;do

(cd $i/ && action)

echo "completed"
a=`expr $a + $b`

echo "Next Folder"
done

我可以通过更改 a= 来定义循环的开始,但我不确定如何定义循环的结束?按照目前的情况,它将继续遍历该目录中的所有文件夹。谢谢 :)

答案1

使用以下命令seq生成要迭代的列表:

for nn in $(seq 1 50) ; do
    (cd someprefix/$nn && action)
done

或者,如果您的 shell 支持大括号扩展:

for nn in {1..50} ; do
    (cd someprefix/$nn && action)
done

答案2

Bash 允许使用类似于标准 Cfor循环的循环:

for (( i = 1; i <= 50; ++i )); do
  ( cd $i && action )
done

更改cd $icd "$HOME/PATH/$i"您的目录的路径或任何路径。

答案3

#!/bin/bash
a=1
b=1

cd ~/PATH/
for i in $(ls -v) ;do
  (cd $i/ && action) && echo "completed" || echo "error"
  a=$((a+b)); [ "$a" -gt 50 ] && break 
  echo "Next Folder"
done

答案4

你甚至可以做一个 while 循环:

a=1
while [ $a -le 50 ]; do
   (cd $a/ && action) 
   a=$((a+1))
done

或者,另一种选择:

a=1
while (( ++a<=50 ));do
   (cd $a/ && action) 
done

相关内容