break와 continue 루프 제어 명령어 [1] 는 다른 프로그래밍 언어들과 정확히 같은 동작을 합니다. break 명령어는 자신이 속해 있는 루프를 끝내고, continue는 해당 루프 사이클 내에 남아 있는 나머지 명령어들을 건너 뛰고 다음 단계의 루프를 수행합니다.
예 10-19. 루프에서 break와 continue의 영향
#!/bin/bash LIMIT=19 # 상한선 echo echo "3,11을 제외하고 1부터 20까지 출력." a=0 while [ $a -le "$LIMIT" ] do a=$(($a+1)) if [ "$a" -eq 3 ] || [ "$a" -eq 11 ] # 3,11을 제외 then continue # 이번 루프의 나머지 부분을 건너뜀. fi echo -n "$a " done # 독자들을 위한 연습문제: # 루프가 왜 20까지 찍을까요? echo; echo echo 1부터 20까지 찍지만 2다음에 무슨 일인가가 일어납니다. ################################################################## # 똑같은 루프지만 'continue'를 'break'로 바꿨습니다. a=0 while [ "$a" -le "$LIMIT" ] do a=$(($a+1)) if [ "$a" -gt 2 ] then break # 루프 나머지를 모두 건너뜀. fi echo -n "$a " done echo; echo; echo exit 0 |
break 명령어는 매개변수를 받을 수도 있습니다. 매개변수 없는 break는 자신이 속해 있는 제일 안쪽 루프를 끝내지만, break N은 N 레벨의 루프를 빠져나갑니다.
예 10-20. 여러 단계의 루프에서 탈출하기
#!/bin/bash # break-levels.sh: 루프에서 탈출하기. # "break N" 은 N 레벨의 루프를 빠져나갑니다. for outerloop in 1 2 3 4 5 do echo -n "$outerloop 그룹: " for innerloop in 1 2 3 4 5 do echo -n "$innerloop " if [ "$innerloop" -eq 3 ] then break # break 2 라고 하면 어떻게 될까요? # (안쪽과 바깥쪽 루프 모두에서 "탈출"(break)합니다.) fi done echo done echo exit 0 |
continue 명령어도 break와 비슷하게 매개변수를 받아 들일수 있습니다. 매개변수 없는 continue는 자신이 속한 루프의 현재 작업을 끝내고 다음번으로 건너 뛰지만 continue N은 자신이 속한 루프 레벨의 모든 단계를 건너 뛰고 N 레벨 위에 속하는 루프의 다음 단계로 건너 뜁니다.
예 10-21. 더 상위 루프 레벨에서 계속하기(continue)
#!/bin/bash # "continue N" 명령어, N 번째 루프에서 계속하기(continue). for outer in I II III IV V # 바깥쪽 루프 do echo; echo -n "Group $outer: " for inner in 1 2 3 4 5 6 7 8 9 10 # 안쪽 루프 do if [ "$inner" -eq 7 ] then continue 2 # "바깥쪽 루프"인 2번째 레벨의 루프에서 계속 진행합니다. # 윗줄을 그냥 "continue"라고 하면 보통의 루프 동작이 일어납니다. fi echo -n "$inner " # 8 9 10 은 절대 에코되지 않습니다. done done echo; echo # 독자들을 위한 연습문제: # "continue N"을 쓰는 쓸모있는 스크립트를 짜 보세요. exit 0 |
경고 |
continue N은 아무리 의미 있는 상황에서 썼더라도 이해하기 어렵고 쓰기 까다롭기 때문에 안 쓰는게 제일 좋습니다. |
[1] |