Shell script에서 for, whlie, until을 사용하여 반복문을 사용하는 방법에 대해서 알아보겠습니다.

이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다.

1. for 문

for문은 다음과 같이 사용할 수 있습니다. 다른 언어의 for문과 동일합니다.

이 예제는 특정 횟수만큼 for문을 반복하는 예제입니다.

  • for i in {1..5}; do : i가 1에서 5까지 반복
#!/bin/bash

for i in {1..5}; do
    echo "Loop: $i"
done

Output:

Loop: 1
Loop: 2
Loop: 3
Loop: 4
Loop: 5

for문으로 배열을 순회하는 예제

for문을 이용하여 배열의 모든 요소들을 순회하려면 아래와 같이 구현하면 됩니다.

#!/bin/bash

# 배열 정의
fruits=("Apple" "Banana" "Orange" "Grape")

# 배열의 각 항목을 순회하며 출력
for fruit in "${fruits[@]}"; do
    echo "Fruit: $fruit"
done

Output:

$ bash example.sh
Fruit: Apple
Fruit: Banana
Fruit: Orange
Fruit: Grape

break로 for문을 종료하는 예제

for문 안에서 break를 호출하면 for문을 중단합니다.

아래 예제는 1에서 10까지 반복하지만, 5에서 break가 호출되어 10까지 반복하지 않고 중단됩니다.

#!/bin/bash

for i in {1..10}; do
    if [ $i -eq 5 ]; then
        echo "for문을 중단합니다."
        break
    fi
    echo "반복 횟수: $i"
done

Output:

$ bash example.sh
반복 횟수: 1
반복 횟수: 2
반복 횟수: 3
반복 횟수: 4
for문을 중단합니다.

for문에서 continue를 사용하는 예제

for문 안에서 continue를 호출하면 실행 중인 루프를 중단하고, 다음 반복을 합니다.

아래 예제는 1에서 10까지 반복하는데, 5에서 continue를 호출합니다. 5의 반복에서는 continue로 중단되어 echo "반복 횟수: $i" 코드가 수행되지 않으며 다음 6으로 넘어갑니다.

#!/bin/bash

for i in {1..10}; do
    if [ $i -eq 5 ]; then
        echo "5는 건너뜁니다."
        continue
    fi
    echo "반복 횟수: $i"
done

Output:

$ bash example.sh
반복 횟수: 1
반복 횟수: 2
반복 횟수: 3
반복 횟수: 4
5는 건너뜁니다.
반복 횟수: 6
반복 횟수: 7
반복 횟수: 8
반복 횟수: 9
반복 횟수: 10

현재 디렉토리의 모든 파일을 순회하는 예제

for문을 사용하면 현재 디렉토리 아래에 있는 파일들을 쉽게 탐색할 수 있습니다.

아래와 같이 입력하면 file에 현재 디렉토리의 파일들 입력되면서 for문을 순회합니다.

#!/bin/bash

# 현재 디렉토리의 파일들을 순회하며 출력
for file in *; do
    echo "파일: $file"
done

Output:

$ bash example.sh
파일: example.sh

2. while 문

while문은 다음과 같이 사용할 수 있습니다. 다른 언어의 while문과 동일합니다.

  • while [ $counter -le 5 ]; do : count가 5 이하일 때까지 반복
  • -le : “is less than or equal to “의 의미로, 어떤 값보다 작거나 또는 같을 때 true
  • $counter -le 5 : count가 5보다 작거나 같으면 true, 5보다 크면 false
#!/bin/bash

counter=1
while [ $counter -le 5 ]; do
    echo "Loop: $counter"
    ((counter++))
done

Output:

$ bash example.sh
Loop: 1
Loop: 2
Loop: 3
Loop: 4
Loop: 5

while문에서 배열을 순회하는 예제

아래 예제는 while문에서 배열의 모든 요소를 순회하면서 값을 출력하는 예제입니다.

  • while [ $index -lt $array_length ]; do : index가 array_length보다 작으면 while문 수행
  • -lt : “is less than”의 의미로, A -lt B는 A가 B보다 작을 때 true
# 배열 정의
fruits=("Apple" "Banana" "Orange" "Grape")

index=0
array_length=${#fruits[@]}

while [ $index -lt $array_length ]; do
    fruit=${fruits[$index]}
    echo "Fruit: $fruit"
    ((index++))
done

Output:

$ bash example.sh
Fruit: Apple
Fruit: Banana
Fruit: Orange
Fruit: Grape

break로 while문을 종료하는 예제

아래 예제는 무한 루프로, 계속 사용자 입력을 받고, 사용자가 “exit”를 입력하면 break를 사용하여 탈출하는 예제입니다.

  • if [ "$input" == "exit" ]; then : input이 “exit”이면 if문이 수행됨
  • break : while문 반복 종료
#!/bin/bash

echo "종료하려면 'exit'을 입력하세요."

while true; do
    read -p "입력: " input
    if [ "$input" == "exit" ]; then
        echo "루프를 종료합니다."
        break
    fi
    echo "입력된 값: $input"
done

Output:

$ bash example.sh
종료하려면 'exit'을 입력하세요.
입력: a
입력된 값: a
입력: b
입력된 값: b
입력: exit
루프를 종료합니다.

3. until 문

until은 while과 비슷하지만 반복하는 조건이 반대입니다. 즉, 어떤 조건이 오기 전까지 반복문을 반복합니다.

예를 들어, 아래 코드는 counter가 5 이상이 되기 전까지 반복합니다.

  • until [ $counter -gt 5 ]; do : 조건이 false이면 반복, true면 중지 (counter가 5 이상이 되기 전까지 반복)
  • -gt : “is greater than”의 의미로 어떤 값보다 클 때 true
  • $counter -gt 5 : counter가 5보다 클 때 true, 이하일 때 false
#!/bin/bash

counter=1
until [ $counter -gt 5 ]; do
    echo "Loop: $counter"
    ((counter++))
done

Output:

$ bash example.sh
Loop: 1
Loop: 2
Loop: 3
Loop: 4
Loop: 5