셸 스크립팅 · 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
이 예제에서 변수 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
라인 list=”var1 var2 var3 var4”는 목록 변수의 값을 정의합니다. 그런 다음 for var in $list 라인에서 var에 할당되고, 마지막으로 mkdir $var 라인에서 디렉토리가 생성됩니다.
구문 3: 파일로서의 목록을 가진 for 루프 문
cat 명령어를 사용하여 코드 내부에 선언하는 대신 기존 파일에서 목록을 가져와서 for 루프 문에서 사용할 수 있습니다. 예를 들어, 좋아하는 텍스트 편집기를 열고 최소한 5개의 디렉토리 이름을 나열하세요.

다음으로 같은 텍스트 편집기에서 새 탭을 열고 새 스크립트를 만듭니다. 이 스크립트는 이전에 생성한 디렉토리 목록이 저장된 동일한 디렉토리에 저장되어야 합니다.
#!/bin/bash
dirList=$(cat list)
echo "디렉토리 생성 중...."
for var in $dirList
do
mkdir $var
done
이 예제는 리눅스 컴퓨터에서 수백 개의 디렉토리를 생성해야 할 때 유용합니다, 그렇지 않나요?
구문 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
While 루프 문
while 문은 bash에서 키워드 while을 사용하는 반복 구조의 일종입니다. C 유형 구문과는 달리 while 반복 제어 구조는 초기화, 불리언 테스트 및 증가/감소 문을 분리합니다.
구문 1: 산술 기호 기반 조건문을 가진 while 구조
<초기화>
while(condition)
do
###여기에 당신의 코드가 들어갑니다
<증가/감소>
donewhile을 다른 루프 문과 구별하기 위해, 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
예제를 살펴보면, while 문은 카운터 변수 var의 초기화로 시작합니다. 다음으로, 불리언 테스트는 while 키워드 뒤에 선언되고, 반복될 문 집합은 do와 done 문 내부에 선언됩니다. while 문에서는 인터프리터가 불리언 테스트 결과가 참일 때만 코드 반복을 시작하고 실행합니다. 반면, 루프 문은 불리언 표현식의 결과가 거짓이 될 때만 코드 반복을 종료합니다.
구문 2: 기억법 기반 조건문을 가진 while 루프 문
<초기화>
while [ <조건> ]
do
####여기에 당신의 코드가 들어갑니다
<증가/감소>
donewhile 루프 문 내부에 기억법 기반 조건문을 선언할 수도 있습니다. 선언 시, 괄호 대신 대괄호를 사용합니다. (여기에서 기억법 기반 조건문을 검토하세요) 예를 들어:
#!/bin/bash
var=1;
while [ $var -le 5 ]
do
printf "정수 %d 입력: " $var
read input
result=$((result+input))
var=$((var+1))
done
echo "결과는 " $result
구문 3: 파일 기반 조건문을 가진 while 루프 문
while read <변수_이름>
do
####여기에 당신의 코드가 들어갑니다
done <<텍스트 파일 경로>for 루프 문에서 했던 것처럼, 텍스트 파일을 열고 while 루프 문에 연결할 수 있습니다. 예를 들어:
#!/bin/bash
mkdir sample2
cd sample2
echo "디렉토리 생성 중..."
while read var
do
mkdir $var
done

이 예제에서는 이전에 만든 목록을 재활용하고 동일한 디렉토리에 새 스크립트를 만들었습니다. 텍스트 파일이 다른 디렉토리에 있는 경우, < 기호 뒤에 파일의 정확한 경로를 제공해야 합니다.
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
구문 2: 기억법 기반 조건문을 가진 until 루프 문
<초기화>
until [ <조건> ]
do
####여기에 당신의 코드가 들어갑니다
<증가/감소>
doneuntil 문은 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
결론
이 튜토리얼 부분에서는 bash가 지원하는 세 가지 루프 구조인 for, while 및 until 루프 문을 다루었습니다. 이러한 각 문은 서로 다른 구조, 사용법 및 장점을 가지고 있습니다. bash는 다양한 구조를 지원하여 프로그래머에게 더 많은 선택지를 제공하고, 따라서 셸 스크립팅을 쉽게 코딩할 수 있게 합니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.