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

Jyo*_*osk 5 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
Run Code Online (Sandbox Code Playgroud)

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

use*_*274 8

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

for nn in $(seq 1 50) ; do
    (cd someprefix/$nn && action)
done
Run Code Online (Sandbox Code Playgroud)

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

for nn in {1..50} ; do
    (cd someprefix/$nn && action)
done
Run Code Online (Sandbox Code Playgroud)


Kus*_*nda 5

Bash 允许循环看起来像标准的 C 循环for

for (( i = 1; i <= 50; ++i )); do
  ( cd $i && action )
done
Run Code Online (Sandbox Code Playgroud)

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


Luc*_*ini 4

#!/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
Run Code Online (Sandbox Code Playgroud)