IMCAT.DEV
로그인 가입
Shell 중급 문법

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. 흔한 실수와 주의사항

    1. select 구문 사용 시 유효한 선택지 확인 부족
    2. - 잘못된 코드:

           select fruit in 사과 바나나; do
               echo "선택한 과일: $fruit"
           done

      - 올바른 코드:

           select fruit in 사과 바나나; do
               if [ -z "$fruit" ]; then
                   echo "유효하지 않은 선택입니다."
               else
                   echo "선택한 과일: $fruit"
                   break
               fi
           done
    3. test 조건문에서 괄호를 생략함
    4. - 잘못된 코드:

           if test $number > 10; then

      - 올바른 코드:

           if test $number -gt 10; then

      6. 정리

    5. select는 사용자에게 여러 선택지를 제공하여 입력을 받을 수 있다.
    6. test는 조건을 평가하여 스크립트의 흐름을 제어하는 데 사용된다.
    7. 두 기능 모두 스크립트의 유연성을 높이는 데 기여한다.

다음에 학습하면 좋은 주제는 함수와 배시 스크립트의 디버깅입니다. 이 두 가지 주제를 통해 코드를 더욱 효율적으로 관리하고, 오류를 줄일 수 있습니다.