9 Linux Bash 스크립트의 for 루프 예제

게시 됨: 2022-08-19
파란색 배경 위에 노트북의 Linux 명령줄.
Fatmawati achmad zaenuri/Shutterstock.com

다재다능한 Bash for 루프는 정해진 횟수만큼 루프하는 것 이상을 수행합니다. 여러분의 Linux 스크립트에서 성공적으로 사용할 수 있도록 다양한 변형에 대해 설명합니다.

for 루프

모든 스크립팅 및 프로그래밍 언어에는 루프를 처리하는 방법이 있습니다. 루프는 반복적으로 실행하려는 코드 섹션입니다. 동일한 지침 세트를 스크립트에 계속해서 입력하는 대신 루프가 코드의 한 섹션을 계속해서 반복합니다.

Linux 시작을 위한 9가지 Bash 스크립트 예제
Linux에서 시작하기 위한 9가지 Bash 스크립트 예제

Bash for 루프는 매우 유연합니다. 숫자, 단어, 배열, 명령줄 변수 또는 다른 명령의 출력과 함께 작동할 수 있습니다. 이들은 루프의 헤더 에 사용됩니다. 헤더는 루프가 작동하는 대상(예: 숫자 또는 문자열)과 루프를 중지할 종료 조건을 지정합니다.

루프의 본문 에는 반복하려는 코드가 포함되어 있습니다. 루프에서 수행 하려는 작업을 유지합니다. 루프 본문에는 유효한 스크립트 명령이 포함될 수 있습니다.

루프 카운터 또는 반복자라는 변수는 값 범위 또는 데이터 항목 목록을 단계별로 실행하는 데 사용됩니다. 각 루프에 대해 반복자는 다음 숫자, 문자열 또는 루프가 반복되는 모든 데이터 유형의 값을 취합니다. 이렇게 하면 루프가 각 데이터 항목의 값을 차례로 사용하거나 경우에 따라 데이터 항목 자체를 조작할 수 있습니다.

루프에 대한 단순

첫 번째 for 루프를 작성하려는 경우 이 간단한 예제를 통해 시작할 수 있습니다.

숫자 목록을 사용하는 for 루프

명령줄에서 for 루프를 실행할 수 있습니다. 이 명령은 간단한 for 루프를 만들고 실행합니다. 반복자는 i 라는 변수입니다. 숫자 목록의 각 값에 차례로 i 를 할당하겠습니다. 루프의 본문은 해당 값을 터미널 창에 인쇄합니다. i 루프를 종료하는 조건은 전체 숫자 목록을 반복했을 때입니다.

 1 2 3 4 5에서 i에 대해; 에코 $i; 완료 

1에서 5까지 계산하는 for 루프

루프가 한 바퀴 돌 때마다 변수 i 가 1씩 증가한다는 점에 유의하는 것이 중요합니다. 하지만 이는 숫자 목록이 매번 1씩 올라가기 때문입니다.

이 숫자 목록은 3에서 시작하여 2단계로 올라가다가 임의로 44로 올라갑니다.

 3 5 7 9 11 44에서 i에 대해; 에코 $i; 완료 

비순차적 숫자 목록을 통한 for 루프 계산

for 루프와 차이가 없습니다. 목록의 한쪽 끝에서 시작하여 목록의 모든 값이 사용될 때까지 각 값을 차례로 사용합니다.

또한 숫자가 오름차순일 필요도 없습니다. 어떤 순서로든 될 수 있습니다.

 3 43 44 11 9에서 i에 대해 에코 $i; 완료 

정렬되지 않은 숫자 목록을 통한 for 루프 계산

단어 목록을 사용하는 for 루프

우리는 말로 쉽게 똑같이 할 수 있습니다. 스크립트의 텍스트를 편집기에 복사하고 "word-list.sh"로 저장합니다.

 #!/bin/bash

for word in This is a sequence of words
하다 
  에코 $워드
완료

스크립트를 실행 가능하게 하려면 chmod 를 사용해야 하고 이 기사에서 복사한 다른 모든 스크립트를 사용해야 합니다. chmod 명령을 사용할 때마다 스크립트 이름을 바꾸면 됩니다.

 chmod +x 단어 목록.sh 

chmod로 스크립트를 실행 가능하게 만들기

스크립트를 실행해 봅시다.

 ./단어 목록.sh 

단어 목록을 통해 작업하는 for 루프

숫자와 마찬가지로 반복자(이 예에서 변수 word )는 목록 끝에 도달할 때까지 데이터 항목 목록을 통해 작동합니다. 루프 본문은 word 변수의 값에 액세스하므로 목록의 각 단어가 처리됩니다.

숫자 범위가 있는 for 루프

for 루프가 100번 실행되도록 하려면 루프 헤더에 100개의 숫자 시퀀스를 입력해야 하는 꽤 귀찮은 일이 될 것입니다. 숫자 범위를 사용하면 첫 번째와 마지막 숫자만 지정할 수 있습니다.

이 스크립트는 "number-range.sh"입니다.

 #!/bin/bash

나는 {1..10}
하다
  echo "루프 스핀:" $i
완료

숫자 범위는 범위를 시작하고 종료하는 숫자를 구분하는 두 개의 마침표 " .. "를 사용하여 중괄호 " {} "로 정의됩니다. 범위 정의에 공백을 포함하지 않았는지 확인하십시오.

실행 방법은 다음과 같습니다.

 ./숫자 범위.sh 

숫자 범위를 사용하는 for 루프

반복자가 범위의 숫자를 탐색하는 데 사용해야 하는 단계 크기를 정의하는 다른 숫자를 포함할 수 있습니다. 이 스크립트 "number-range2.sh"는 0에서 32까지의 범위와 4의 단계 크기를 사용합니다.

 #!/bin/bash

{0..32..4}의 i에 대해
하다
  echo "루프 스핀:" $i
완료

반복자는 숫자 범위를 4단계로 이동합니다.

 ./숫자 범위2.sh 

반복자 4단계를 사용하는 for 루프

파일 이름을 사용하는 for 루프

단어 목록을 처리할 수 있기 때문에 스크립트가 파일 이름과 함께 작동하도록 할 수 있습니다. 이 스크립트는 "filenames.sh"라고 합니다.

 #!/bin/bash

word-list.sh에 있는 파일의 경우 number-range.sh number-range2.sh filenames.sh
하다
  ls -lh "$파일"
완료

ls 가 할 수 있는 일만 하는 스크립트를 갖는 것은 꽤 무의미하지만, 루프 본문 내에서 파일 이름에 액세스하는 방법을 보여줍니다.

 ./파일명.sh 

파일 이름 목록을 사용하는 for 루프

숫자 범위를 사용하는 것과 유사한 방식으로 루프 헤더의 파일 패턴을 사용하여 처리하려는 파일을 지정할 수 있습니다. 이렇게 하면 많은 입력을 피할 수 있고 파일 이름을 미리 알 필요가 없습니다.

이 스크립트는 "filenames2.sh"라고 합니다. 현재 디렉토리의 모든 스크립트 파일에 대한 스크립트 보고를 하기 위해 파일 이름 목록을 파일 이름 패턴 "*.sh"로 바꿨습니다.

 #!/bin/bash

*.sh의 파일용
하다
  ls -lh "$파일"
완료

다음은 출력입니다.

 ./파일명2.sh 

*.sh 파일 패턴을 사용하는 for 루프

명령줄 매개변수를 사용하는 for 루프

명령줄에 파일 이름 패턴을 전달하여 유연성을 더 추가할 수 있습니다. $* 변수는 스크립트에 전달된 모든 명령줄 매개변수를 나타냅니다.

"filenames3.sh"입니다.

 #!/bin/bash

$*의 파일용
하다
  ls -lh "$파일"
완료

"n"으로 시작하고 SH 확장자를 갖는 파일 이름을 요청할 것입니다.

 ./파일이름3.sh n*.sh 

파일 패턴을 명령줄 매개변수로 사용하는 for 루프

한 번에 하나 이상의 패턴을 전달할 수도 있습니다.

 ./파일이름3.sh n*.sh .bashrc 

파일 패턴과 파일 이름의 명령줄 매개변수를 사용하는 for 루프

반복자 변수 file 은 각 명령줄 매개변수의 값을 취합니다. 파일 이름 패턴이 확장되고 모든 파일 이름이 루프 본문에서 처리됩니다.

관련: Bash에서 변수로 작업하는 방법

C와 같은 for 루프

Bash는 C 프로그래밍 언어에서 볼 수 있는 것과 같은 고전적인 3항 for 루프를 지원합니다. 루프 헤더에 3개의 항이 있기 때문에 3항 for 루프라고 합니다.

  • 루프 반복기의 초기 값입니다.
  • 루프가 계속되는지 종료되는지 테스트합니다.
  • 반복자의 증가 또는 감소입니다.

이 스크립트는 "c-like.sh"입니다.

반복자 I 은 루프 시작 시 1로 설정되고 루프는 " i<=10 " 문이 참인 동안 실행됩니다. i 가 11에 도달하자마자 for 루프가 중지됩니다. 반복자는 루프가 회전할 때마다 1씩 증가합니다.

 #!/bin/bash

(( i=1; i<=10; i++ ))
하다 
  echo "루프 번호:" $i
완료

이 스크립트를 실행해 봅시다.

 ./c-like.sh 

3항 또는 C와 같은 for 루프

C와 같은 for 루프를 사용하면 요구 사항이 약간 이상한 for 루프를 쉽게 만들 수 있습니다. 이 루프는 15에서 시작하여 3단계로 거꾸로 계산합니다. 이것은 "c-like2.sh"입니다.

 #!/bin/bash

(( i=15; i>0; i-=3 ))
하다 
  echo "루프 번호:" $i
완료

실행하면 3단계 뒤로 점프해야 합니다.

 ./c-like2.sh 

역으로 계산하는 C와 같은 루프

무한 루프

이 형식의 for 루프를 사용하여 무한 루프를 만들 수도 있습니다. 다음과 같이 루프 헤더에서 모든 요소를 ​​제거하기만 하면 됩니다. "infinite.sh"입니다.

 #!/bin/bash

을 위한 (( ; ; ))
하다
  echo "중지하려면 Ctrl+C를 누르세요..."
  수면 1
완료

루프를 중지하려면 Ctrl+C를 눌러야 합니다.

 ./무한.sh 

무한 C와 같은 for 루프

워드 배열을 사용하는 for 루프

단어 배열을 통해 쉽게 반복할 수 있습니다. 루프 헤더에 배열 이름을 제공해야 하며 반복자는 배열의 모든 항목을 살펴봅니다. "word-array.sh"입니다.

 #!/bin/bash

distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

$distributions의 배포판용
하다
  에코 $ 배포판
완료

모든 배포판은 우리를 위해 나열됩니다.

 ./단어 배열.sh 

단어 배열을 사용하는 for 루프

계속 명령

루프가 특정 항목을 건너뛰도록 하려면 반복자가 해당 항목과 일치하는지 테스트하고 continue 명령을 사용하십시오. continue 명령은 루프의 현재 회전을 중단합니다. 반복자를 증가시키고 루프의 다음 회전을 시작합니다. 건너뛰려는 항목이 목록의 마지막 항목이 아니라고 가정합니다.

"word-array2.sh"입니다. "Arch" 배열 항목을 건너뛰지만 다른 모든 배열 구성원을 처리합니다.

 #!/bin/bash

distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

$distributions의 배포판용
하다
  if [[ "$distro" == "아치" ]] ;
    그 다음에
    계속하다
  파이
  에코 $ 배포판
완료

"Arch"는 터미널 창에 나타나지 않습니다.

 ./단어 배열2.sh 

계속 명령으로 인해 단어 배열의 항목을 건너뛰는 for 루프

중단 명령

break 명령은 루프를 벗어나 더 이상의 처리를 방지합니다.

"word-array3.sh"입니다. continuebreak 로 대체한 이전 스크립트와 동일합니다.

 #!/bin/bash

distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

$distributions의 배포판용
하다
  if [[ "$distro" == "아치" ]] ;
    그 다음에
    부서지다
  파이
  에코 $ 배포판
완료

반복자가 "Arch"를 포함하면 for 루프는 더 이상 처리를 포기합니다.

 ./단어 배열3.sh 

break 명령으로 인해 추가 처리를 포기하는 for 루프

연관 배열을 사용하는 for 루프

Bash 4 이상에서 연관 배열을 사용하면 키 또는 값으로 검색할 수 있는 키-값 쌍 목록을 만들 수 있습니다. 키와 값 사이의 양방향 관계 때문에 데이터 사전이라고도 합니다.

Linux에서 Bash 사전이란 무엇이며 어떻게 사용합니까?
관련 Linux에서 Bash 사전이란 무엇이며 어떻게 사용합니까?

for 루프를 사용하여 연관 배열을 반복할 수 있습니다. 이 스크립트는 "associative.sh"입니다. "dog", "cat", "robin" 및 "human" 각각에 대해 하나씩 4개의 항목이 있는 연관 배열을 정의합니다. 이것들이 열쇠입니다. 값은 각각의 다리(기본) 수입니다.

 #!/bin/bash

선언 -A 동물=( [개]=네 발 [고양이]=네 발 [로빈]=두 발 [인간]=두 발 )

${!animals[@]} 다리
하다
  if [ ${animals[$legs]} == "양발" ]; 그 다음에 
    에코 ${다리}
  파이
완료

반복자를 legs 라고 합니다. 루프 헤더에는 " ! " 느낌표. 이것은 논리적 NOT 연산자로 작동하지 않으며 연관 배열 구문의 일부입니다. 배열을 검색하는 데 필요합니다.

루프의 본문은 문자열 비교 테스트를 수행합니다. 배열 멤버의 값이 "Two-legged"이면 키 값을 터미널 창에 인쇄합니다. 실행하면 스크립트는 다리가 두 개인 생물을 인쇄합니다.

 ./associative.sh 

for 루프를 사용하여 연관 배열에서 항목 추출

명령 출력 반복

파일 이름과 같은 항목 목록을 생성하는 명령 또는 명령 시퀀스가 ​​있는 경우 for 루프를 사용하여 반복할 수 있습니다. 예기치 않은 파일 이름 확장에 주의해야 하지만 간단한 경우에는 괜찮습니다.

이 스크립트는 "command.sh"입니다. lswc 를 사용하여 줄, 단어 및 바이트 수와 함께 스크립트 파일 이름의 정렬된 목록을 제공합니다.

 #!/bin/bash

for i in $(ls *.sh | 정렬);
하다 
  에코 $(화장실 $i)
완료

실행하면 알파벳순으로 나열된 파일과 함께 각 파일에 대한 통계를 얻습니다.

 ./command.sh 

for 루프를 사용하여 두 개의 파이프된 명령 출력 반복

Dazzling for 루프

for 루프는 다양하고 쉽게 이해할 수 있는 스크립팅 도구입니다. 그러나 유연성이 있기 때문에 다른 루프가 존재한다는 사실을 잊지 마십시오. for 루프가 필요한 전부라고 생각하는 데 현혹되지 마십시오.

Linux Bash 스크립트에서 파일을 한 줄씩 처리하는 방법
관련 Linux Bash 스크립트에서 파일을 한 줄씩 처리하는 방법

예를 들어, while 루프는 파일에서 줄을 읽는 것과 같이 for 루프보다 특정 작업에 훨씬 더 적합합니다.

좋은 스크립트를 작성한다는 것은 당면한 작업에 가장 적합한 도구를 사용하는 것을 의미합니다. for 루프는 트릭의 도구 상자에 있는 훌륭한 도구입니다.