Shell 환경에서의 제어 흐름 관리
Python이나 Java 등 고급 언어와 마찬가지로 Bash 스크립트에서도 조건부 분기 및 반복 실행을 위한 제어 구조가 존재합니다. 특히 자동화 작업을 수행할 때 효율적인 루프 처리는 필수적입니다. 여기서는 Bash 에서 가장 기본적으로 사용되는 for 및 while 반복문의 구문 구조와 활용 예를 살펴봅니다.
1. for 반복문의 다양한 형태
for 문은 지정된 리스트나 시퀀스에 대해 명령어를 여러 번 실행할 때 사용합니다. 두 가지 주요 작성 방식이 있습니다.
시퀀스 기반 반복
특정 범위의 숫자나 항목을 순회하고 싶을 때는 seq 명령어나 중괄호 표현식을 활용할 수 있습니다. 변수 이름을 명시적으로 지정하여 각 iteration(반복) 의 값을 저장합니다.
#!/bin/bash
# 1 부터 10 까지 숫자 시퀀스 생성 및 출력
for number in {1..10}; do
echo "현재 번호: $number";
done
- for number in {1..10}: 중괄호 확장 기능을 이용해 1 에서 10 까지의 연속 숫자를 생성하고 이를 변수
number에 하나씩 할당합니다. - do ... done: 루프 본문을 감싸는 시작 및 종료 키워드입니다.
- echo: 현재 반복되는 변수의 값과 함께 문자열을 표준 출력에 표시합니다.
C 스타일 구문
초기화, 조건 판단, 증감식 일정을 한 줄에 정의하는 C 언어 형식의 문법도 지원하며, 복잡한 수치 연산이 필요할 때 유용합니다.
#!/bin/bash
# 초기값 설정부터 종료 조건까지 통합 정의
for ((index = 0; index < 5; index++)); do
printf "Step %d\n", $index;
done
- (( index = 0; ... )): 세 부분으로 나뉘며, 첫 번째는 변수 초기화, 두 번째는 계속 실행할 조건, 세 번째는 매 반복 후 실행될 식입니다.
- printf:
echo보다 포맷팅 제어가 용이한 출력 함수를 사용하여 인덱스 값을 정렬하여 보여줍니다.
2. while 반복문의 조건 제어
while 문은 주어진 조건식이 참(true) 일 때까지 블록 내 명령어를 반복 실행합니다. 주로 실행 횟수가 미리 결정되지 않은 상황에서 사용됩니다.
산술 확장 기반 체크
Bash 에서 제공하는 산술 확장을 통해 비교 연산을 수행하는 방법입니다. 외부 명령어 호출 없이 내장 연산자로 처리되므로 속도가 빠릅니다.
#!/bin/bash
counter=1
# counter 가 5 미만이면서 참인 동안 루프 수행
while (( counter < 5 )); do
echo "Count: $counter"
(( counter++ )) # 단축 연산으로 변수 증가
done
- while (( counter < 5 )): 괄호 안의 산술 식이 평가되어 0 이 아니면 참으로 간주합니다.
- (( counter++ )): 변수에 1 을 더하는 연산을 수행하고 반환값으로 이전 값을 갖습니다. 내부 상태 변경에 효과적입니다.
let 명령어 활용
전통적인 let 명령어를 사용하여 변수의 값을 수정하는 방식입니다. 특정 구문 하에서는 문자열로 인식되지 않도록 주의해야 합니다.
#!/bin/bash
limit=3
while [ $limit -gt 0 ]; do
echo "Remaining: $limit"
let "limit -= 1" # limit 에서 1 을 뺌
done
- [ $limit -gt 0 ]: 테스트 명령어를 이용해 숫자 대소를 비교합니다.
- let: 단순한 산술 표현식을 평가할 때 쓰이며, 표현식은 따옴표로 묶는 것이 안전합니다.