[shell script] 이중 for문에서 break, continue를 이용해 바깥쪽 루프를 종료/스킵 하는 법

HYEOB KIM·2022년 4월 18일
0

Shell

목록 보기
28/71

break, continue에 매개변수 주기

breakbreak가 속해 있는 반복문을 종료합니다.

j = 2일 때, break를 만나면 j를 돌리는 for문이 완전히 종료되어 뒤에 j = 3, 4의 경우를 실행하지 않습니다.

바깥의 i를 돌리는 for문에는 영향이 전혀 없습니다.

$ cat test1
#!/bin/bash
for (( i = 1; i <= 4; i++ ))
do
        echo "i -> $i"
        for (( j = 1; j <= 4; j++ ))
        do
                if (( $j == 2 ))
                then
                        break
                fi
                echo "  j -> $j"
        done
done

$ ./test1
i -> 1
        j -> 1
i -> 2
        j -> 1
i -> 3
        j -> 1
i -> 4
        j -> 1

하지만 여기서 바깥쪽 i를 돌리는 for문을 종료하는 방법이 있습니다.

break n

n의 기본값은 1로 현재 속해 있는 루프를 나타냅니다.
숫자가 하나씩 증가할 때마다 바깥쪽 루프를 가리킵니다.

break 2를 주게 되면 바깥쪽 i를 돌리는 루프가 종료됩니다.

$ cat test1
#!/bin/bash
for (( i = 1; i <= 4; i++ ))
do
        echo "i -> $i"
        for (( j = 1; j <= 4; j++ ))
        do
                if (( $j == 2 ))
                then
                        break 2
                fi
                echo "  j -> $j"
        done
done

$ ./test1
i -> 1
        j -> 1

continuecontinue가 속해 있는 반복문의 내용에서 continue 다음 코드들을 스킵합니다.

j = 2일 때 continue를 만나면 j를 돌리는 for문 안에서 continue 아래의 내용을 생략하고 다음 반복을 진행하는 것을 볼 수 있습니다.

바깥의 i를 돌리는 for문에는 영향이 전혀 없습니다.

$ cat test1
#!/bin/bash
for (( i = 1; i <= 4; i++ ))
do
        echo "i -> $i"
        for (( j = 1; j <= 4; j++ ))
        do
                if (( $j == 2 ))
                then
                        continue
                fi
                echo "  j -> $j"
        done
done

$ ./test1
i -> 1
        j -> 1
        j -> 3
        j -> 4
i -> 2
        j -> 1
        j -> 3
        j -> 4
i -> 3
        j -> 1
        j -> 3
        j -> 4
i -> 4
        j -> 1
        j -> 3
        j -> 4

continue도 마찬가지로 매개변수를 주면 바깥쪽 루프의 내용을 스킵할 수 있습니다.

$ cat test1
#!/bin/bash
for (( i = 1; i <= 4; i++ ))
do
        echo "i -> $i"
        for (( j = 1; j <= 4; j++ ))
        do
                if (( $j == 2 ))
                then
                        continue 2
                fi
                echo "  j -> $j"
        done
done

$ ./test1
i -> 1
        j -> 1
i -> 2
        j -> 1
i -> 3
        j -> 1
i -> 4
        j -> 1
profile
Devops Engineer

0개의 댓글