while, until, for 및 select 루프를 사용할 때 루프를 조기에 종료하려면 (종료 조건이 충족되지 않으면 루프 종료) break 또는 continue 키워드를 사용할 수 있습니다.
C, C ++ , C # , Python , Java 와 같은 대부분의 프로그래밍 언어에서 break and continue는 현재 루프 수준에서 벗어날 수만 있고 내부 루프에서 break 및 continue는 외부 루프에 영향을주지 않습니다. 그러나 break and continue는 셸에서 continue는 여러 루프에서 점프 할 수 있습니다. 즉, 내부 루프에서 중단 및 계속은 외부 루프에서 점프 할 수 있습니다.
실제 개발에서 break와 continue는 일반적으로 현재 수준의 루프에서 점프하는 데만 사용되며 다층 루프에서 점프 할 필요가 거의 없습니다.
★ break 키워드
Shell break 키워드의 사용법은 다음과 같습니다.
- break n
n은 루프에서 점프 할 레벨의 수를 나타내며, n이 생략되면 현재 전체 루프에서 점프 함을 의미합니다. break 키워드는 일반적으로 if 문과 함께 사용됩니다. 즉, 조건이 충족되면 루프에서 점프합니다.
[예제 1] 사용자가 입력 한 양수를 단말기에서 계속 읽어서 합을 구합니다.
- #! / bin / bash
- sum = 0
- while read n ; do
- if (( n > 0 )); then
- (( sum + = n ))
- else
- break
- fi
- done
- echo "sum = $ sum"
실행 결과 :
10↙
20↙
30↙
0↙
sum = 60
while loop는 읽기 명령의 종료 상태에 의해 루프 조건이 만족되는지 여부를 판단하며 Ctrl + D 조합 키 (입력 종료 표시)를 눌렀을 때만 read n실패로 판단합니다. 이때 while 루프는 종료됩니다.
Ctrl + D 키 조합을 누르는 것 외에도 0보다 작거나 같은 정수를 입력 할 수도 있습니다. 그러면 break 문을 실행하여 루프를 종료합니다 (루프 외부).
[예제 2] break를 사용하여 이중 루프에서 빠져 나옵니다.
break 뒤에 숫자가 나오지 않으면 현재 루프에서 벗어나는 것을 의미합니다. 두 수준의 중첩이있는 루프의 경우 두 개의 break 키워드를 사용해야합니다. 예를 들어 4 * 4 행렬을 출력하려면 :
- #! / bin / bash
- i = 0
- while ((++ i )); do #outer loop
- if (( i > 4 )); then
- break # 외부 루프에서 벗어나기
- fi
- j = 0 ;
- while ((++ j )); do #inner 루프
- if (( j > 4 )); 다음
- break # 내부 루프에서 바운스
- fi
- printf "% -4d" $ ((i * j))
- done
- printf " \ n "
- done
작업 결과 :
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
j> 4가 설정되면 두 번째 브레이크를 실행하고 내부 루프에서 점프합니다. 외부 루프는 i> 4가 설정 될 때까지 계속 실행되고 외부 루프에서 점프합니다. 내부 루프는 4 번, 외부 루프는 1 번 실행되었습니다.
또한 숫자를 사용하여 한 번에 2 층 루프에서 뛰어 내릴 수 있습니다. 다음 코드를 참조하십시오.
- #! / bin / bash
- i = 0
- while ((++ i )); do #outer loop
- j = 0 ;
- while ((++ j )); do #inner 루프
- if (( i > 4 )); then
- break 2 # 내부 및 외부 루프에서 분리
- fi
- if (( j > 4 )); then
- break # 내부 루프에서 바운스
- fi
- printf "% -4d" $ ((i * j))
- done
- printf " \ n "
- done
수정 된 코드는 모든 중단을 내부 루프로 이동합니다. 독자 break 2는 프로그램이 한 번에 두 개의 루프에서 점프 할 수 있도록하는이 명령문 에 집중해야합니다 . 즉, 먼저 내부 루프에서 점프 한 다음 외부 루프에서 점프 할 수 있습니다.
★ 계속 키워드
Shell continue 키워드의 사용법은 다음과 같습니다.
- continue n
n은 루프의 레이어 수를 나타냅니다.
- n이 생략되면 continue는 현재 레벨의 루프 문에 대해서만 유효 함을 의미하며, continue를 만나면이 루프를 건너 뛰고이 루프의 나머지 코드를 무시하고 다음 루프로 바로 이동합니다.
- 예를 들어 n을 가져 오면 n의 값이 2 인 경우 continue는 내부 및 외부 루프 문 모두에 유효합니다. 내부 레이어뿐만 아니라 외부 레이어도이 루프를 건너 뛰고 그 효과는 내부 루프와 동일합니다. 레이어 루프와 외부 루프 는 동시에 n없이 계속 실행됩니다. 이해하기 어려울 수 있습니다. 나중에 코드를 통해 설명하겠습니다.
continue 키워드는 일반적으로 if 문과 함께 사용됩니다. 즉, 조건이 충족되면 루프에서 점프합니다.
[예제 1] 사용자가 입력 한 100 이내의 양수를 단말기에서 지속적으로 읽고 합계를 찾습니다.
- #! / bin / bash
- sum = 0
- while read n ; do
- if (( n < 1 || n > 100 )); then
- continue
- fi
- (( sum + = n ))
- done
- echo "sum = $ sum"
실행 결과 :
10↙
20↙
-1000↙
5↙
9999↙
25↙
sum = 60
변수 합계 의 최종 값은 60, -1000 및 9999는 계산되지 않습니다. 이는 -1000과 9999가 1 ~ 100 범위에 있지 않기 때문입니다. 내부에서 조건이 충족되면 continue 문이 실행되고 현재 루프를 건너 뜁니다. 즉 ((sum+=n)), 문 을 건너 뜁니다 .
Ctrl + D를 누르면 입력이 종료되고 read n실패로 판단되며 while 루프가 종료됩니다.
[예제 2] continue를 사용하여 여러 루프에서 벗어나십시오. 다음 코드를 참조하십시오.
- #! / bin / bash
- for (( i = 1 ; i <= 5 ; i ++)); do
- for (( j = 1 ; j <= 5 ; j ++)); do
- if (( i * j == 12 )); then
- continue 2
- fi
- printf "% d * % d = %-4d" $ i $ j $ ((i * j))
- done
- printf " \ n "
- done
작업 결과 :
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
실행중인 결과에서 만났을 때 continue 2내부 for 루프를 건너 뛰는 것이 아니라 외부 for 루프도 건너 뛰는 것을 알 수 있습니다.
★ 중단과 계속의 차이점
Break는 모든 루프를 종료하는 데 사용되며 루프 문은 더 이상 실행할 기회가 없습니다. continue는이 루프를 종료하고 다음 루프로 직접 점프하는 데 사용됩니다. 루프 조건이 설정되면 루프가 계속됩니다.
'Linux' 카테고리의 다른 글
쉘 기능 매개 변수 / Shell let 명령 : 정수에 대한 수학적 연산 (0) | 2020.10.16 |
---|---|
Shell 함수 상세 설명 (함수 정의, 함수 호출) (0) | 2020.10.14 |
루프 세부 사항에서 쉘 선택 (0) | 2020.10.13 |
for in 루프에 대한 Python 스타일 (0) | 2020.10.13 |
루프 용 C 언어 스타일 (0) | 2020.10.13 |