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

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

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

소개

일반적인 Bash 스크립트에는 차례로 실행될 일련의 명령이 포함되어 있습니다. 변수는 문자열, 정수 인덱스 값, 명령 결과 등을 저장하는 데 사용할 수 있습니다. 사용자가 특정 명령을 여러 번 실행하려면 루프가 필요합니다. 한 명령의 출력이 목록 형식이고 각 결과에서 목록의 두 번째 명령이 실행될 때 특히 유용합니다.

일반 구문

에 대한 일반 구문 ~을위한 Bash의 루프는 다음과 같습니다.

~에 대한 ... ... 완료

여기서, 유효한 Linux 셸 변수 이름이어야 하는 Bash 변수입니다. 즉, 이름에는 문자(az, AZ), 숫자(0-9) 및 밑줄( _ )의 조합이 포함되고 문자 또는 밑줄.

그만큼 반복될 정수 인덱스의 사용자 정의 범위이거나 정수 또는 문자열의 사용자 정의 목록입니다. 다른 Linux 명령을 포함할 수도 있지만 이러한 명령의 출력은 공백이나 개행 문자로 구분되어야 합니다. ).

어떤 명령을 실행하든지 내부에 배치되어야 합니다. 할..다 블록.

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

정수 값 범위에 대한 반복: 다음 코드는 dir1, dir2, dir3 ~ dir10이라는 디렉토리를 생성합니다.

for i in {1..10} do mkdir dir$i done

고정 값 목록에 대한 반복: 다음 코드는 지정된 고정 목록의 각 문자열 또는 정수를 인쇄합니다.

for i in Hello 1 2 3 Bye! 에코 $i 완료

명령 출력에 대한 루핑: 다음 코드는 출력을 반복합니다. 주어진 형식으로 각 파일의 이름을 인쇄합니다.

for i in `ls` do echo "파일 이름은 $i입니다" 완료

표현식 기반 구문

C 프로그래밍 언어와 유사한 표현식 기반 구문은 Bash에서도 가능합니다.

for ((식 1; 식 2; 식 3)) do ... ... done

여기, 식 1 인덱스 변수의 초기화입니다. 식 2 루프를 종료해야 하는 조건입니다. 이 조건은 각 반복에서 확인됩니다. 식 3 인덱스 변수 값의 증가/감소/수정을 지정합니다.

다음 예제에서는 단순히 0에서 4까지의 값을 인쇄합니다.

for ((i=0;i<5;i++)) 에코 $i 완료

다음 예제에서는 표현식이 지정되지 않았기 때문에 무한 루프를 생성합니다.

for (( ; ; )) do echo "중지하려면 Ctrl-C를 누르십시오." 완료

중단하고 계속

조건부 종료에 대한 break 문

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

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i; 완료

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

for file in `ls` do flen=`wc -c $file` if [[ "$flen" = "0 $file" ]] then echo "$file is empty" break else echo $flen fi 완료 

명령 화장실 -c 파일의 줄 수를 출력 . 형식으로 인쇄합니다. , 예를 들어, 10 테스트.txt. 행 수가 0, 즉 빈 파일일 때 루프를 빠져 나옵니다.

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

C 및 다른 많은 프로그래밍 언어와 유사하게 bash에도 계속하다 문, 특정 조건이 충족되면 루프에서 반복의 나머지 부분을 건너뜁니다.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then 계속 fi echo $i; 완료

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

다음 예에서는 파일의 줄 수를 인쇄하고 특정 반복은 계속하다 파일이 아닌 디렉토리인 경우.

for file in `ls` do if [[ -d $file ]] then 계속 fi wc -c "$file" done

[[ -d $파일 ]] 파일이 디렉토리인지 확인합니다. 그렇다면 다음 파일, 즉 다음 반복으로 건너뜁니다. 디렉토리가 아니면 다음을 사용하여 파일의 줄 수를 인쇄합니다. 화장실 이전에 표시된 것처럼 명령.

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

루프 구문은 Bash 셸에서 직접 사용하거나 셸 스크립트 파일에서 사용할 수 있습니다. 한 번 ~을위한 루프 구문이 쉘에 입력되면 쉘은 사용자가 반복되는 명령을 계속할 수 있도록 프롬프트를 계속합니다.

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

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

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

chmod +x test.sh

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

./test.sh

결론

그만큼 ~을위한 Bash의 루프는 매우 간단한 기능이지만 거의 모든 종류의 복잡한 스크립팅 시나리오에서 사용됩니다. 일반 Linux 사용자든 고급 Linux 사용자든, 시스템 관리 및 DevOps 작업에 대한 자동화를 배우기 시작하든 상관없이 이를 배우면 큰 도움이 됩니다.