셸 스크립팅 · 5 min read · Nov 14, 2025

셸 스크립팅 4부: 반복 제어 구조

HowtoForge의 셸 스크립팅 튜토리얼 시리즈 4부에 오신 것을 환영합니다 (튜토리얼의 1부, 2부 및 3부를 보려면 여기를 클릭하세요). 이 부분에서는 bash 셸의 다양한 반복 제어 구조와 각 구조를 사용하는 방법을 몇 가지 예를 통해 설명합니다. 시작해 보겠습니다.

소개

반복 제어 구조는 루프 제어 구조라고도 하며, 프로그래밍 언어에서 반복적이거나 재귀적인 작업을 단순화하는 데 사용되는 제어 구조의 일종입니다. 루프 문은 코드를 최적화하여 코드를 최소화하는 방법을 제공함으로써 동일한 출력을 제공하는 비구조적 코드보다 문제를 해결하기 쉽게 만듭니다. bash 셸이 지원하는 루프 문은 for, while 및 until 루프의 세 가지 유형이 있습니다.

For 루프

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

구문 1: For-in 구조

for  in   
 do  
     #### 여기에 당신의 문장을 입력하세요  
 done

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

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

#!/bin/bash   
 result=0;   
 input=0;   
 for var in 1 2 3 4 5   
 do   
      printf "정수 %d 입력: " $var   
      read input   
      result=$((result+input))   
 done   
 echo "결과는 " $result

bash에서 for를 사용한 루프 문

이 예제에서 변수 var는 루프의 카운터 역할을 합니다. 그 값은 키워드 in 뒤의 숫자 목록에서 정의되며, 셸은 루프 문이 실행될 때마다 var 변수의 값을 변경합니다. 목록에 정수 값이 5개만 있으므로 셸은 루프 문 내부의 코드를 5번만 실행합니다.

구문 2: 문자열 목록 값을 가진 for 루프 문

카운터의 항목 목록을 보유할 변수를 선언할 수도 있습니다. 예를 들어, 다음 코드를 고려해 보세요:

#!/bin/bash  
 list="var1 var2 var3 var4"   
 var=""   
 mkdir sample   
 cd sample   
 echo "디렉토리 생성 중...."  
 for var in $list   
 do   
      mkdir $var   
 done

for 루프 문을 사용한 문자열 값 읽기

라인 list=”var1 var2 var3 var4”는 목록 변수의 값을 정의합니다. 그런 다음 for var in $list 라인에서 var에 할당되고, 마지막으로 mkdir $var 라인에서 디렉토리가 생성됩니다.

구문 3: 파일로서의 목록을 가진 for 루프 문

cat 명령어를 사용하여 코드 내부에 선언하는 대신 기존 파일에서 목록을 가져와서 for 루프 문에서 사용할 수 있습니다. 예를 들어, 좋아하는 텍스트 편집기를 열고 최소한 5개의 디렉토리 이름을 나열하세요.

for 루프를 사용하여 텍스트 파일에서 디렉토리 생성

다음으로 같은 텍스트 편집기에서 새 탭을 열고 새 스크립트를 만듭니다. 이 스크립트는 이전에 생성한 디렉토리 목록이 저장된 동일한 디렉토리에 저장되어야 합니다.

#!/bin/bash   
 dirList=$(cat list)   
 echo "디렉토리 생성 중...."  
 for var in $dirList   
 do   
 mkdir $var   
 done

for 루프를 사용하여 텍스트 파일에서 디렉토리 생성

이 예제는 리눅스 컴퓨터에서 수백 개의 디렉토리를 생성해야 할 때 유용합니다, 그렇지 않나요?

구문 4: C 유사 구문

for((초기화; boolean_test; 증가/감소))  
 do   
 #### 여기에 당신의 코드가 들어갑니다  
 done

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

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

bash에서 for 루프 문

While 루프 문

while 문은 bash에서 키워드 while을 사용하는 반복 구조의 일종입니다. C 유형 구문과는 달리 while 반복 제어 구조는 초기화, 불리언 테스트 및 증가/감소 문을 분리합니다.

구문 1: 산술 기호 기반 조건문을 가진 while 구조

<초기화>  
 while(condition)  
 do  
     ###여기에 당신의 코드가 들어갑니다  
 <증가/감소>  
 done

while을 다른 루프 문과 구별하기 위해, while 문에 대한 첫 번째 예제를 구성해 보겠습니다.

#!/bin/bash  
 result=0   
 input=0   
 var=1   
 while((var <= 5))   
 do  
 printf "정수 %d 입력: " $var   
 read input   
 result=$((result+input))   
 var=$((var+1))  
 done   
 echo "결과는 " $result

bash 셸 스크립팅의 while 루프 문

예제를 살펴보면, while 문은 카운터 변수 var의 초기화로 시작합니다. 다음으로, 불리언 테스트는 while 키워드 뒤에 선언되고, 반복될 문 집합은 do와 done 문 내부에 선언됩니다. while 문에서는 인터프리터가 불리언 테스트 결과가 참일 때만 코드 반복을 시작하고 실행합니다. 반면, 루프 문은 불리언 표현식의 결과가 거짓이 될 때만 코드 반복을 종료합니다.

구문 2: 기억법 기반 조건문을 가진 while 루프 문

<초기화>  
 while [ <조건> ]  
 do  
 ####여기에 당신의 코드가 들어갑니다  
 <증가/감소>  
 done

while 루프 문 내부에 기억법 기반 조건문을 선언할 수도 있습니다. 선언 시, 괄호 대신 대괄호를 사용합니다. (여기에서 기억법 기반 조건문을 검토하세요) 예를 들어:

#!/bin/bash   
 var=1;   
 while [ $var -le 5 ]   
 do   
 printf "정수 %d 입력: " $var   
 read input   
 result=$((result+input))   
 var=$((var+1))   
 done   
 echo "결과는 " $result

셸 스크립팅의 while 루프 문

구문 3: 파일 기반 조건문을 가진 while 루프 문

while read <변수_이름>  
 do   
 ####여기에 당신의 코드가 들어갑니다   
 done <<텍스트 파일 경로>

for 루프 문에서 했던 것처럼, 텍스트 파일을 열고 while 루프 문에 연결할 수 있습니다. 예를 들어:

#!/bin/bash   
 mkdir sample2  
cd sample2   
 echo "디렉토리 생성 중..."  
 while read var   
 do   
     mkdir $var   
 done

bash 스크립팅에서 while 루프를 사용한 파일 읽기

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

Until 루프 문

bash가 지원하는 또 다른 유형의 루프 문은 until 구조입니다. until 문은 불리언 표현식이 거짓으로 평가될 때까지 루프 내부의 모든 명령을 실행합니다. 이는 while 문과 정반대입니다.

구문 1: 산술 기호 기반 조건문을 가진 until 루프

until ((<조건문>))  
 do  
 ####명령 집합  
 done

예제를 살펴보겠습니다:

result=0   
 input=0   
 var=1   
 until((var > 5))   
 do   
 printf "정수 %d 입력: " $var  
 read input   
 result=$((result+input))   
 var=$((var+1))   
 done   
 echo "결과는 " $result

셸 스크립팅의 until 루프 문

구문 2: 기억법 기반 조건문을 가진 until 루프 문

<초기화>  
 until [ <조건> ]  
 do  
      ####여기에 당신의 코드가 들어갑니다  
 <증가/감소>  
 done

until 문은 while 루프 문과 정반대이므로, until 구조 내에서 기억법 기반 조건문을 선언할 수도 있습니다. 그러나 종료하기 위해서는 반대 조건문을 선언해야 합니다. 즉, 조건문이 거짓으로 평가되도록 해야 합니다.

!/bin/bash   
 result=0   
 input=0   
 var=1   
 until [ $var -gt 5 ]   
 do   
 printf "정수 %d 입력: " $var   
 read input   
 result=$((result+input))   
 var=$((var+1))   
 done   
 echo "결과는 " $result

셸 스크립팅의 until 루프 문

결론

이 튜토리얼 부분에서는 bash가 지원하는 세 가지 루프 구조인 for, while 및 until 루프 문을 다루었습니다. 이러한 각 문은 서로 다른 구조, 사용법 및 장점을 가지고 있습니다. bash는 다양한 구조를 지원하여 프로그래머에게 더 많은 선택지를 제공하고, 따라서 셸 스크립팅을 쉽게 코딩할 수 있게 합니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.