웹사이트 검색

쉘 스크립팅 파트 4: 반복 제어 구조


이 페이지에서

  1. 소개
  2. For 루프\n
    1. 구문 1: For-in 구조
    2. 구문 2: 문자열 목록 값이 있는 루핑 문\n
    3. 구문 3: 목록을 파일로 포함하는 For 루프 문\n
    4. 구문 4: C와 유사한 구문\n

    1. 구문 1: 조건문 기반 산술 기호가 있는 While 구조\n
    2. 구문 2: 니모닉 기반 조건문을 사용하여 문을 반복하는 동안\n
    3. 구문 3: 파일 기반 조건문을 사용하여 문을 반복하는 동안\n

    1. 구문 1: 산술 기호 기반 조건문이 있는 루프까지\n
    2. 구문 2: 니모닉 기반 조건문이 있는 루핑 문까지\n

    HowtoForges 셸 스크립팅 가이드 시리즈의 4부에 오신 것을 환영합니다(튜토리얼의 3부를 읽으려면 여기를 클릭하세요). 이 파트에서는 bash 쉘의 다양한 반복 제어 구조와 각 구조를 사용하는 방법을 몇 가지 예제를 통해 다룰 것입니다. 시작하겠습니다.

    소개

    루핑 제어 구조라고도 하는 반복 제어 구조는 반복적이거나 재귀적인 작업을 단순화하는 데 사용되는 프로그래밍 언어의 제어 구조 유형입니다. 루핑 문은 코드를 최소화하는 방법을 제공하여 모든 코드를 최적화하므로 동일한 출력을 제공하는 구조화되지 않은 코드보다 문제를 더 쉽게 해결할 수 있습니다. bash 셸이 지원하는 세 가지 유형의 루핑 문(for, while 및 until 루프)이 있습니다.

    For 루프

    for 루프는 for 키워드를 사용하여 반복문을 선언하는 반복문입니다. bash는 for 루프 문에 대해 다양한 구문을 지원합니다.

    구문 1: For-in 구조

    for <varName> in <list>
    do
        #### your statement here
    done

    이 구문은 키워드 for로 시작한 다음 변수 이름, 키워드 in 및 변수에 가능한 값 목록이 옵니다. 목록의 각 값은 공백으로 구분되며 반복될 코드 줄의 시작은 do에 정의되고 done 키워드로 끝납니다.

    사용자가 5개의 값을 입력하고 숫자의 합계를 얻을 수 있는 간단한 for 루프 문을 만들어 보겠습니다.

    #!/bin/bash 
    result=0;
    input=0;
    for var in 1 2 3 4 5
    do
         printf "Input integer %d : " $var
         read input
         result=$((result+input))
    done
    echo "the result is " $result

    이 예에서 변수 var는 루프의 카운터 역할을 합니다. 그 값은 in 키워드 뒤의 숫자 목록에 정의되며 쉘은 반복문에서 주기를 실행할 때마다 var 변수의 값을 변경합니다. 목록에 5개의 정수 값만 있기 때문에 shell은 루핑 문 내부의 코드를 5번만 실행합니다.

    구문 2: 문자열 목록 값이 있는 루핑 문

    카운터의 항목 목록을 보유할 변수를 선언할 수도 있습니다. 예를 들어 다음 코드를 고려하십시오.

    #!/bin/bash
    list="var1 var2 var3 var4"
    var=""
    mkdir sample
    cd sample
    echo creating the "directories...."
    for var in $list
    do
         mkdir $var
    done

    list="var1 var2 var3 var4" 행은 목록 변수의 값을 정의합니다. 그런 다음 $list의 var 행에서 var에 할당되었으며 마지막으로 mkdir $var 행에서 디렉토리가 생성됩니다.

    구문 3: 목록을 파일로 포함하는 For 루프 문

    cat 명령을 사용하여 코드 내에서 선언하는 대신 for 루프 문에 사용할 기존 파일에서 목록을 검색할 수도 있습니다. 예를 들어 즐겨 사용하는 텍스트 편집기를 연 다음 최소 5개의 디렉토리 이름을 나열합니다.

    그런 다음 동일한 텍스트 편집기에서 새 탭을 열고 새 스크립트를 만듭니다. 이 스크립트는 이전에 생성한 디렉터리 목록이 저장되어 있는 동일한 디렉터리에 저장해야 합니다.

    #!/bin/bash 
    dirList=$(cat list)
    echo "creating directories...."
    for var in $dirList
    do
    mkdir $var
    done

    이 예제는 Linux 컴퓨터에 수백 개의 디렉토리를 만들어야 할 때 유용합니다. 그렇지 않습니까?

    구문 4: C와 유사한 구문

    for((initialization; boolean_test; increment/decrement))
    do
    #### your code goes here
    done

    아마도 쉘이 지원하는 for 루프의 가장 친숙한 구조는 C와 유사한 구조일 것입니다. 루프는 카운터 변수의 초기화로 시작하고 쉘은 초기화 후에 선언된 부울 표현식을 평가합니다. 부울 표현식 결과가 참이면 쉘은 do 절 내부의 명령문 집합을 실행하고, 그렇지 않으면 루핑 명령문을 종료하고 done 키워드 다음 줄로 진행합니다. 셸은 Boolean 테스트 이후에 선언된 증가 또는 감소 문을 통해 다음 반복을 진행합니다. 예를 들어, 이 구조를 사용하여 첫 번째 예를 재구성해 보겠습니다.

    #!/bin/bash 
    result=0
    input=0
    for((var=1;var<=5;var++))
    do
    printf "Input integer %d : " $var
    read input
    result=$((result+input))
    done
    echo $result

    문을 반복하는 동안

    while 문은 키워드 while을 활용하는 bash의 반복 구조 유형입니다. for 루프 구조의 C 타입 구문과 달리 while 반복 제어 구조는 초기화, 부울 테스트 및 증가/감소문을 분리합니다.

    구문 1: 산술 기호 기반 조건문이 있는 While 구조

    <initialization>
    while(condition)
    do
        ###your code goes here
    <increment/decrement>
    done

    다른 루프 문과 while을 구별할 수 있도록 while 문에 대한 첫 번째 예를 구성해 보겠습니다.

    #!/bin/bash
    result=0
    input=0
    var=1
    while((var <= 5))
    do
    printf "Input integer %d : " $var
    read input
    result=$((result+input))
    var=$((var+1))
    done
    echo "the result is " $result

    예제를 보면 while 문은 카운터 변수 var의 초기화로 시작합니다. 다음으로 키워드 while 다음에 부울 테스트가 선언되고 반복될 명령문 세트가 do 및 done 명령문 내에서 선언됩니다. while 문에서 해석기는 부울 테스트 결과가 참인 경우에만 코드 반복을 시작하고 실행합니다. 반면에 루핑 문 will 문은 부울 표현식 결과가 false인 경우에만 코드 반복을 종료합니다.

    구문 2: 니모닉 기반 조건문을 사용하여 문을 반복하는 동안

    <initialization>
    while [ <condition> ]
    do
    ####your code goes here
    <increment/decrement>
    done

    while 루프 문 내에서 니모닉 기반 조건문을 선언할 수도 있습니다. 선언은 괄호 대신 대괄호를 사용합니다. (여기에서 니모닉 기반 조건문을 검토하십시오.) 예를 들면 다음과 같습니다.

    #!/bin/bash 
    var=1;
    while [ $var -le 5 ]
    do
    printf "Input integer %d : " $var
    read input
    result=$((result+input))
    var=$((var+1))
    done
    echo "the result is " $result

    구문 3: 파일 기반 조건문을 사용하여 문을 반복하는 동안

    while read <variable_name>
    do
    ####your code goes here
    done <<path to the text file>

    for 루프 문에서 수행한 것과 마찬가지로 텍스트 파일을 열고 while 루프 문에 연결할 수도 있습니다. 예를 들어:

    #!/bin/bash 
    mkdir sample2
    cd sample2
    echo "creating directories..."
    while read var
    do
        mkdir $var
    done<list

    이 예에서는 얼마 전에 만든 목록을 재활용하고 같은 디렉터리에 새 스크립트를 만들었습니다. 텍스트 파일이 다른 디렉토리에 있는 경우 < 기호 다음에 파일의 정확한 경로를 제공해야 합니다.

    루핑 문까지

    bash가 지원하는 또 다른 유형의 반복문은 until 구조입니다. until 문은 부울 표현식이 결과를 false로 선언할 때까지 루프 내의 모든 명령을 실행합니다. while 문과 완전히 반대입니다.

    구문 1: 산술 기호 기반 조건문이 있는 루프까지

    until ((<conditional_statement>))
    do
    ####set of commands
    done

    예를 들어 보겠습니다.

    result=0 
    input=0
    var=1
    until((var > 5))
    do
    printf "Input integer %d : " $var
    read input
    result=$((result+input))
    var=$((var+1))
    done
    echo "the result is " $result

    구문 2: 니모닉 기반 조건문이 있는 루핑 문까지

    <initialization>
    until [ <condition> ]
    do
         ####your code goes here
    <increment/decrement>
    done

    until 문은 while 루프 문과 정반대이므로, until 구조에서 니모닉 기반 조건문을 선언할 수도 있습니다. 그러나 를 종료하려면 반대 조건문을 선언해야 합니다. 즉, make to 조건문은 false로 평가됩니다.

    !/bin/bash 
    result=0
    input=0
    var=1
    until [ $var -gt 5 ]
    do
    printf "Input integer %d : " $var
    read input
    result=$((result+input))
    var=$((var+1))
    done
    echo "the result is " $result

    결론

    이 자습서 부분에서는 bash가 지원하는 세 가지 반복 구조(for, while 및 until 반복 문)를 다룹니다. 이러한 각 문은 구조, 사용법 및 장점이 다릅니다. bash는 다양한 구조를 지원하여 프로그래머에게 더 많은 선택권을 제공하므로 쉘 스크립팅을 쉽게 코딩할 수 있습니다.