학습
Shell 고급 제어문 (select, test)
Shell 고급 제어문 (select, test) — 중급
고급 제어문 (select, test)
1. 도입 (왜 배워야 하는가)
Shell 스크립트는 시스템 관리 및 자동화 작업에 필수적인 도구입니다. 고급 제어문인 select와 test는 사용자 입력을 처리하고 조건을 평가하는 데 매우 유용합니다. 이 두 가지 기능을 활용하면 스크립트의 유연성과 사용자 친화성을 크게 향상시킬 수 있습니다. 예를 들어, 사용자의 선택에 따라 다른 작업을 수행하거나, 조건에 따라 스크립트의 흐름을 제어하는 것이 가능합니다. 이를 모를 경우 스크립트는 단순한 작업만 수행하게 되어, 복잡한 요구사항을 처리하기 어려워집니다.
2. 핵심 개념 설명
select
select는 사용자에게 여러 선택지를 제공하고, 그 중 하나를 선택하도록 하는 기능입니다. 마치 메뉴를 보여주고, 손님이 원하는 음식을 고르는 것과 같습니다. 사용자가 선택한 번호에 따라 다른 행동을 취할 수 있습니다.
test
test는 조건문을 평가하는 명령어로, 특정 조건이 참인지 거짓인지 판단합니다. 예를 들어, "이 사과가 신선한가?"를 판단하는 것과 비슷합니다. 조건이 참이면 특정 작업을 수행하고, 거짓이면 다른 작업을 수행하도록 제어합니다.
| 개념 | 설명 | 예시 |
|---|---|---|
select | 사용자에게 선택지를 제시하고 선택을 받는다 | 메뉴에서 음식 선택하기 |
test | 조건을 평가하고 그 결과에 따라 분기한다 | 사과가 신선한지 확인하기 |
3. 기본 코드 예제
select 예제
#!/bin/bash
echo "과일을 선택하세요:"
select fruit in 사과 바나나 오렌지; do
case $fruit in
사과) echo "사과를 선택했습니다."; break ;;
바나나) echo "바나나를 선택했습니다."; break ;;
오렌지) echo "오렌지를 선택했습니다."; break ;;
*) echo "유효하지 않은 선택입니다." ;;
esac
done
실행 결과
과일을 선택하세요:
1) 사과
2) 바나나
3) 오렌지
# 사용자가 2를 선택한 경우
바나나를 선택했습니다.
echo로 메시지를 출력합니다.select문을 사용해 옵션을 제시합니다.- 사용자가 선택한 옵션에 따라
case문으로 분기하여 결과를 출력합니다.
test 예제
#!/bin/bash
echo "숫자를 입력하세요:"
read number
if test $number -gt 10; then
echo "$number는 10보다 큽니다."
else
echo "$number는 10보다 작거나 같습니다."
fi
실행 결과
숫자를 입력하세요:
15
15는 10보다 큽니다.
test 명령어로 입력된 숫자가 10보다 큰지 비교합니다.4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니
장바구니에서 상품을 선택하고, 결제 방법을 선택하는 스크립트입니다.
#!/bin/bash
echo "장바구니에서 상품을 선택하세요:"
select item in "티셔츠" "바지" "신발"; do
echo "선택한 상품: $item"
echo "결제 방법을 선택하세요:"
select payment in "신용카드" "계좌이체" "페이팔"; do
echo "선택한 결제 방법: $payment"
break 2 # 두 개의 select 문을 탈출
done
done
break 2를 사용하여 두 개의 select 문을 동시에 종료합니다.예제 2: 서버 상태 체크
서버의 상태를 확인하고, 사용자에게 원하는 작업을 선택하게 하는 스크립트입니다.
#!/bin/bash
echo "서버 상태를 선택하세요:"
select status in "구동 중" "중지" "재부팅"; do
if [ "$status" "구동 중" ]; then
echo "서버가 정상적으로 작동 중입니다."
elif [ "$status" "중지" ]; then
echo "서버가 중지되었습니다."
elif [ "$status" == "재부팅" ]; then
echo "서버를 재부팅합니다."
else
echo "유효하지 않은 상태입니다."
fi
break
done
5. 흔한 실수와 주의사항
select구문 사용 시 유효한 선택지 확인 부족test조건문에서 괄호를 생략함select는 사용자에게 여러 선택지를 제공하여 입력을 받을 수 있다.test는 조건을 평가하여 스크립트의 흐름을 제어하는 데 사용된다.- 두 기능 모두 스크립트의 유연성을 높이는 데 기여한다.
- 잘못된 코드:
select fruit in 사과 바나나; do
echo "선택한 과일: $fruit"
done
- 올바른 코드:
select fruit in 사과 바나나; do
if [ -z "$fruit" ]; then
echo "유효하지 않은 선택입니다."
else
echo "선택한 과일: $fruit"
break
fi
done
- 잘못된 코드:
if test $number > 10; then
- 올바른 코드:
if test $number -gt 10; then
6. 정리
다음에 학습하면 좋은 주제는 함수와 배시 스크립트의 디버깅입니다. 이 두 가지 주제를 통해 코드를 더욱 효율적으로 관리하고, 오류를 줄일 수 있습니다.