10. 루프 제어
break
와 continue
루프 제어 명령어는 다른 프로그래밍 언어들과 같은 동작을 한다. 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 N
은 N
레벨의 루프를 빠져나간다.
예제) 여러 단계의 루프에서 탈출하기
#!/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