Skip to content

10. 루프 제어


breakcontinue 루프 제어 명령어는 다른 프로그래밍 언어들과 같은 동작을 한다. break 명령어는 자신이 속해 있는 루프를 끝내고, continue는 해당 루프 사이클 내에 남아 있는 나머지 명령어들을 건너 뛰고 다음 단계의 루프를 수행한다.


예제) 루프에서 break와 continue의 영향
#!/bin/bash

LIMIT=9

echo "3, 9을 제외하고 1부터 10까지 출력"
# 3, 9을 제외하고 1부터 10까지 출력

a=0

while [ "$a" -le "$LIMIT" ]; do
    a=$(($a + 1))

    if [ "$a" -eq 3 ] || [ "$a" -eq 9 ]; then
        continue
    fi

    echo "$a"
done
# 1
# 2
# 4
# 5
# 6
# 7
# 8
# 10

a=0

while [ "$a" -le "$LIMIT" ]; do
    a=$(($a + 1))

    if [ "$a" -gt 2 ]; then
        break
    fi

    echo "$a"
done
# 1
# 2

exit 0


break 명령어는 매개변수를 받을 수도 있다. 매개변수 없는 break는 자신이 속해 있는 제일 안쪽 루프를 끝내지만, break NN 레벨의 루프를 빠져나간다.


예제) 여러 단계의 루프에서 탈출하기
#!/bin/bash

for outerloop in 1 2; do
    echo "$outerloop 그룹: "

    for innerloop in 1 2 3 4 5; do
        echo "$innerloop "

        if [ "$innerloop" -eq 3 ]; then
            break
        fi
    done
done
# 1 그룹:
# 1
# 2
# 3
# 2 그룹:
# 1
# 2
# 3

for outerloop in 1 2; do
    echo "$outerloop 그룹: "

    for innerloop in 1 2 3 4 5; do
        echo "$innerloop "

        if [ "$innerloop" -eq 3 ]; then
            break 2
        fi
    done
done
# 1 그룹:
# 1
# 2
# 3

exit 0


continue 명령어도 break와 비슷하게 매개변수를 받아 들일 수 있다. 매개변수 없는 continue는 자신이 속한 루프의 현재 작업을 끝내고 다음 번으로 건너 뛰지만, continue N은 자신이 속한 루프 레벨의 모든 단계를 건너 뛰고 N 레벨 위에 속하는 루프의 다음 단계로 건너 뛴다.


예제) 더 상위 루프 레벨에서 계속하기
#!/bin/bash

for outer in I II; do
    echo "Group $outer: "

    for inner in 1 2 3 4 5; do
        if [ "$inner" -eq 3 ]; then
            continue
        fi

        echo "$inner"
    done
done
# Group I:
# 1
# 2
# 4
# 5
# Group II:
# 1
# 2
# 4
# 5

for outer in I II; do
    echo "Group $outer: "

    for inner in 1 2 3 4 5; do
        if [ "$inner" -eq 3 ]; then
            continue 2
        fi

        echo "$inner"
    done
done
# Group I:
# 1
# 2
# Group II:
# 1
# 2

exit 0

References