Bash의 중첩 for 루프
이 튜토리얼에서는 bash의 중첩 루프에 대해 설명합니다. 먼저 bash에서 사용할 수 있는 다양한 for
루프 공식에 대해 빠르게 논의할 것입니다. 다음으로 중첩된 for
루프에 대해 예제와 함께 설명합니다.
Bash에서 for
루프의 변형
먼저 bash에서 for
루프의 구문을 살펴보겠습니다.
for var in something
do
command
done
이 구문에서 변수 이름은 사용자가 선택한 것입니다. 무언가
에 대한 여러 옵션이 있으며 곧 설명하겠습니다.
우리는 for
본문 안에 얼마든지 명령을 작성할 수 있습니다. 여러 for
루프 변형을 bash에서 사용할 수 있습니다. 아래에서 몇 가지를 빠르게 볼 수 있습니다.
숫자 범위의 ‘for’
for
루프를 사용하여 숫자 목록을 지정할 수 있으며 다음 예제와 같이 해당 숫자를 하나씩 반복할 수 있습니다.
for i in 1 3 8
do
echo $i
done
루프는 주어진 값 목록(즉, 1 3 8
)에서 반복됩니다. 이 특정 예에서 출력은 다음과 같습니다.
1
3
8
값 목록의 ‘for’
값 목록을 정의하고 다음과 같이 목록을 반복할 수 있습니다.
x=(1 3 8)
for i in ${x[@]}
do
echo $i
done
이 코드의 결과는 이전 예제의 출력과 동일합니다. for
루프 문에서 {x[@]}
는 리스트 x
의 모든 요소에 대해 나타냅니다.
시퀀스 범위의 ‘for’
시작 번호, 이중 점(..
), 종료 번호로 값 범위를 지정할 수 있습니다. 마찬가지로 한 쌍의 다른 점과 단계를 둘 수 있습니다.
예를 들어 다음 두 가지 예제 루프 공식을 살펴보겠습니다.
for i in {1..3}
do
echo $i
done
echo "----------------------"
for i in {1..3..2}
do
echo $i
done
이 코드의 출력은 다음과 같습니다.
1
2
3
----------------------
1
3
단어가 있는 문자열의 for
공백으로 구분된 문자열의 단어 목록을 정의하고 다음과 같이 문자열의 단어를 반복할 수 있습니다.
names="Asim Babar Munir Ali"
for name in $names
do
echo $name
done
이 코드의 출력에는 다음과 같이 별도의 줄에 이름이 지정됩니다.
Asim
Babar
Munir
Ali
C 스타일 for
표현식
C 언어의 for
와 유사한 for
루프에서 표현식을 제공할 수 있습니다. 예를 참조하십시오.
for ((i=1;i<=5;i++))
do
echo $i
done
다음과 같은 출력이 생성됩니다.
1
2
3
4
5
for
루프에서 continue
문 사용
for
루프의 본문에 몇 가지 조건을 입력하고 continue
문을 사용하여 루프의 다음 본문을 건너뛸 수 있습니다. 예를 참조하십시오.
for ((i=1;i<=5;i++))
do
if [ $i == 3 ]
then
continue
fi
echo $i
done
if
조건으로 인해 루프는 3
값에 대한 echo
명령을 건너뜁니다. 따라서 출력은 1 2 4 5
입니다.
루프 오버 명령줄 인수
bash 스크립트에 명령줄 인수를 제공하고 공백으로 구분된 인수에 대해 for
루프를 실행할 수 있습니다. 예를 참조하십시오.
for i in $@
do
echo "Script arg is $i"
done
첫 번째 줄에서 $@
기호는 공백으로 구분된 인수 목록을 나타냅니다. 이 예제의 출력을 참조하십시오.
bash myscript.sh 13 28
Script arg is 13
Script arg is 28
명령의 루프 오버 출력
일부 명령의 출력에 대해 for
루프를 실행할 수 있습니다. 예를 참조하십시오.
for f in $(ls)
do
echo "**** $f *****"
done
이 스크립트는 ls
명령의 출력을 가져오고 값을 반복합니다. 예제 출력을 참조하십시오.
**** first.c *****
**** second.c *****
**** third.c *****
루프 오버 변수 시퀀스
런타임에 일부 변수를 기반으로 일부 입력을 실행할 수도 있습니다. 이를 위해 seq 1 1 $n
을 사용할 수 있습니다. 여기서 n
은 변수가 될 수 있습니다. 예를 참조하십시오.
n=4
for i in $(seq 1 1 $n)
do
echo -n $i
echo " "
done
여기에서는 값 4
를 변수에 할당했지만 단어 수 등과 같은 일부 수일 수 있습니다. 예제 출력을 참조하십시오.
1
2
3
4
Bash의 중첩 for
루프
bash에는 다양한 중첩 for
루프가 있습니다. 요구 사항에 따라 중첩된 for
루프의 여러 변형을 만들 수 있습니다(즉, 사용 가능한 for
루프 형식을 결합하여).
여기에서 출력과 함께 여러 예를 볼 수 있습니다.
-
처음 5개의 양수 정수의 처음 10개 배수를 출력합니다.
for number in {1..5} do for n in {1..10} do echo -n $((number*$n)) echo -n " " done echo "" done
이 코드의 출력은 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50
-
정수 목록의 처음 10개 배수를 인쇄합니다.
for number in 2 5 9 do for n in {1..10} do echo -n $((number*$n)) echo -n " " done echo "" done
이 코드의 출력은 다음과 같습니다.
2 4 6 8 10 12 14 16 18 20 5 10 15 20 25 30 35 40 45 50 9 18 27 36 45 54 63 72 81 90
-
삼각형 패턴으로 숫자를 인쇄하십시오.
for number in {1..5} do for n in $(seq 1 1 $number) do echo -n $n done echo "" done
이 코드의 출력은 다음과 같습니다.
1 12 123 1234 12345
가변 크기 패턴을 인쇄하기 위해 명령줄 인수에서 여러 줄을 얻을 수 있습니다. 코드 참조:
for number in $(seq 1 1 $@) do for n in $(seq 1 1 $number) do echo -n $n done echo "" done
bash pattern2.sh 6
명령의 출력은 다음과 같습니다.1 12 123 1234 12345 123456
여기서
patter2.sh
는 이 스크립트의 이름이고6
은 명령줄 인수입니다. -
별표(
*
) 또는 기타 문자로 삼각형 패턴을 인쇄합니다.for number in $(seq 1 1 $@) do for n in $(seq 1 1 $number) do echo -n "*" done echo "" done
4
인수가 있는 코드의 출력은 다음과 같습니다.* ** *** ****
-
메시지를 여러 번 인쇄합니다(강조를 위해).
messages="Sea_is_rough Don't_go_too_far_in_the_sea Remain_in_the_group Don't_take_kids_inside" for i in 1 2 3 4 5 do for message in $messages do echo $message done echo "----------------------------------" done
결과는 다음과 같습니다.
Sea_is_rough Don't_go_too_far_in_the_sea Remain_in_the_group Don't_take_kids_inside ---------------------------------- Sea_is_rough Don't_go_too_far_in_the_sea Remain_in_the_group Don't_take_kids_inside ---------------------------------- Sea_is_rough Don't_go_too_far_in_the_sea Remain_in_the_group Don't_take_kids_inside ---------------------------------- Sea_is_rough Don't_go_too_far_in_the_sea Remain_in_the_group Don't_take_kids_inside ---------------------------------- Sea_is_rough Don't_go_too_far_in_the_sea Remain_in_the_group Don't_take_kids_inside ----------------------------------
-
한 줄에 1부터 앞으로 세는 것을 인쇄하십시오. 명령줄 인수 목록까지 계산을 인쇄해야 합니다.
for number in $@ do for i in $(seq 1 1 $number) do echo -n "$i " done echo "" done
Bash counting.sh 4 5 8
에 대한 이 코드의 출력은 다음과 같습니다.1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 7 8
-
10에서 20까지의 배수를 인쇄하되, 소수의 배수는 이 순서대로 인쇄하지 마십시오.
for number in $(seq 10 1 20) do if [[ $number == 11 || $number == 13 || $number == 17 || $number == 19 ]] then continue fi for n in {1..10} do echo -n $((number*$n)) echo -n " " done echo "" done
이 코드의 출력은 다음과 같습니다.
10 20 30 40 50 60 70 80 90 100 12 24 36 48 60 72 84 96 108 120 14 28 42 56 70 84 98 112 126 140 15 30 45 60 75 90 105 120 135 150 16 32 48 64 80 96 112 128 144 160 18 36 54 72 90 108 126 144 162 180 20 40 60 80 100 120 140 160 180 200
결론적으로 bash에는 다양한 중첩 for
루프가 있습니다. 따라서 작업을 완료하기 위해 요구 사항에 따라 사용 가능한 for
루프 변형 조합을 사용할 수 있습니다.