Bash 'While' 루프: 자습서 및 예제

Bash 스크립팅에서 'while' 루프를 사용하여 명령을 반복합니다.

Bash(Bourne Again Shell)는 GNU/Linux 운영 체제의 셸 명령 프롬프트 및 스크립팅 언어입니다. 대부분의 Linux 배포판의 기본 셸입니다.

대부분의 스크립팅 언어와 마찬가지로 Bash는 유사한 작업을 여러 번 반복하는 루프 구문을 제공합니다. 이 기사에서 우리는 사용하는 방법을 배울 것입니다 동안 Bash의 루프.

소개

그만큼 동안 Bash의 루프는 다른 명령(조건 명령)의 출력을 기반으로 명령(실행된 명령)을 여러 번 실행하는 데 사용됩니다. 실행된 명령은 조건 명령이 성공적으로 실행될 때까지 계속 실행됩니다(즉, 0 상태를 반환합니다. Linux의 모든 명령은 성공의 경우 0을 반환하고 실패의 경우 0이 아닌 정수를 반환함).

조건 명령이 여러 개인 경우 명령문은 목록의 마지막 명령 상태만 고려합니다. 즉, 목록의 마지막 명령이 성공적으로 실행될 때까지 루프가 실행됩니다.

일반 구문

에 대한 일반 구문 동안 Bash의 루프는 다음과 같습니다.

하는 동안

실행 명령 목록은 조건 명령 목록의 마지막 명령이 성공적으로 실행되고 상태 0으로 종료될 때까지 계속 실행됩니다. 반복에서 마지막 조건 명령이 실패하면 루프가 종료됩니다.

사용자는 명령 목록에서 실행 파일을 지정할 수 있습니다. 표준 Linux 프로그램 또는 사용자 정의 사용자 프로그램 또는 스크립트일 수 있습니다. 각 명령은 새 줄에 있거나 같은 줄에서 세미콜론으로 구분되어야 합니다.

몇 가지 예를 살펴보겠습니다.

변수가 특정 값을 가질 때까지 반복: 다음 루프는 변수의 값까지 실행됩니다. 엑스 10과 같지 않습니다.

x=0 동안 [[ $x -ne 10 ]] 에코 $x ((x++)) 완료

각 반복에서 x 값이 10인지 확인합니다. 값은 다음을 사용하여 확인됩니다. 테스트 명령. [[ 표현 ]] 테스트 명령의 구문입니다(참조 남자 테스트). 여기에서 우리가 사용하기 때문에 -네 연산자('not equal to'를 나타냄)에서 테스트 명령은 x 값이 10이 아니면 0, 즉 성공을 반환하고 x 값이 10이면 0이 아닌 값, 즉 실패를 반환합니다.

그런 다음 내부 ...다 블록에서 x의 값을 인쇄하고 증가시킵니다. x 값이 10이면 테스트 명령이 0이 아닌 상태를 반환하고 루프가 종료됩니다.

메모: while 루프에서 사용할 인덱스 변수는 암시적으로 변수를 초기화할 수 있는 for 루프와 달리 while 루프 전이나 조건 명령에서 초기화됩니다.

여러 조건 명령 사용: 다음 루프는 5개의 디렉토리를 생성합니다. dir0, dir1, ... dir4.

z=0 while echo "파일 목록:" ls -l [[ $z -ne 5 ]] do echo "dir$z 생성 중..." mkdir dir$z ((z++)) 완료

첫 번째 명령 echo "파일 목록:" 그리고 ls -l 한 번 완전히 실행됩니다. 성공 또는 실패는 루프가 실행되는 시간에 영향을 미치지 않습니다.

그러면 변수 z의 값을 확인하는 테스트 명령이 실행됩니다. z 값이 5가 아닐 때까지 테스트 명령은 성공 상태를 반환하므로 루프는 계속 실행됩니다. 조건 명령과 실행 명령은 순서대로 계속 실행됩니다. 여기에서 각 반복에 대해 먼저 echo 명령과 ls 명령을 조건에서 실행한 다음 세 번째 조건 명령이 z 값을 확인합니다. 5가 아니면 루프에 진입하여 주어진 명령을 실행합니다.

중단하고 계속

조건부 종료에 대한 break 문

조건문을 사용할 수도 있습니다. 만약 루프 내부. 그만큼 만약 문은 다음과 함께 사용할 수 있습니다. 부서지다 문, 루프에서 조건부 종료.

x=0 while [[ $x -ne 10 ]] do if [[ $x -eq 5 ]] break fi echo $x ((x++)) 완료

위의 while 루프는 0에서 4까지의 숫자를 인쇄합니다. 그런 다음 i의 값이 5일 때 루프에서 빠져 나옵니다. 이것은 명령이 특정 출력을 제공할 때 루프를 종료해야 할 때 특히 유용합니다.

조건부로 반복을 건너뛰는 Continue 문

배쉬는 또한 계속하다 문, 특정 조건이 충족되면 루프에서 반복의 나머지 부분을 건너뜁니다.

x=0 while [[ $x -ne 10 ]] do if [[ $x -eq 5 ]] 계속 fi echo $x ((x++)) 완료

위의 루프는 5를 제외하고 0에서 10까지의 숫자를 인쇄합니다. x=5 반복문이 시작될 때 루프의 나머지 코드를 건너뛰는 계속 문이 있습니다. x=6.

루프 사용: 스크립트 및 명령줄

루프 구문은 Bash 셸에서 직접 또는 실행 가능한 셸 스크립트 파일에서 사용할 수 있습니다. 비슷하다 ~을위한 그리고 동안 루프, 한 번 동안 루프 구문이 쉘에 입력되면 쉘은 사용자가 반복되는 명령을 계속할 수 있도록 프롬프트를 계속합니다.

또는 사용자가 이것을 스크립트 파일에 저장하고 스크립트 파일을 실행할 수 있습니다.

그만큼 #!/bin/bash 시작 시 파일이 실행될 때 사용할 인터프리터를 지정합니다. Bash는 오늘날 가장 일반적으로 사용되는 셸이지만 일부 사용자는 다음과 같은 셸을 선호합니다. zsh, 이 파일의 시작 부분에서 bash 대신 지정해야 합니다.

실행 권한을 부여하려면 이 파일에 대해 다음을 실행합니다.

chmod +x test.sh

드디어, 파일을 실행하기 위해, 운영:

./test.sh

결론

그만큼 동안 루프, 유사 ~을위한 그리고 ~까지 루프는 Bash 스크립팅의 중요한 기능입니다. while 루프는 특정 프로그램이 성공할 때 대체 명령/프로그램을 실행하는 데 사용된다는 점을 제외하고는 until 루프와 비슷한 용도로 사용됩니다. 이것은 종종 고급 네트워킹 스크립트, 시스템 유지 관리 스크립트 등에서 유용성을 찾습니다.