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

또는 쉘이 지원하는 경우버팀대 확장:

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

답변2

forBash에서는 표준 C 루프와 유사한 루프를 사용할 수 있습니다 .

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

디렉터리 경로나 다른 경로 cd $i로 변경합니다 .cd "$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

관련 정보