Profile picture

[Shell Script] case 문법

JaehyoJJAng2023년 04월 05일

case 문

조건문을 처리하는 데 사용되며, 주료 어러 조건을 비교하고 그에 따라 다른 명령을 실행해야 할 때 유용하다.

case문은 조금 더 많은 조건을 처리할 때 if문보다 더 깔끔하고 읽기 쉬운 코드를 작성할 수 있도록 해준다.


기본 구조

기본 구조는 다음과 같다.

case variable in
  pattern1)
    commands1
    ;;
  pattern2)
    commands2
    ;;
  pattern3)
    commands3
    ;;
  *)
    default_commands
    ;;
esac

  • variable: 비교할 변수입니다. 문자열 또는 다른 값이 될 수 있습니다.
  • pattern1, pattern2, pattern3 ... : 매칭하려는 패턴입니다. 패턴은 정규 표현식의 일부 기능을 사용할 수 있습니다.
  • commands1, commands2, commands3: 해당 패턴이 일치할 때 실행될 명령어들입니다.
  • ;;: 명령어 블록의 끝을 나타냅니다.
  • *: 위의 패턴들과 일치하지 않는 모든 경우를 처리하는 "기본" 패턴입니다.
  • esac: case 문의 끝을 나타냅니다. case를 뒤집어 쓴 것처럼 보입니다.

예제

  • 패턴은 여러 개의 값으로 매칭할 수 있으며, 이 경우 |를 사용하여 여러 패턴을 하나로 묶을 수 있습니다.
  • case 문은 기본적으로 변수의 값과 패턴을 단순히 매칭하므로, 복잡한 논리적 비교가 필요하지 않은 경우에 적합합니다.

메뉴 선택

#!/bin/bash

echo "Choose an option:"
echo "1) Start"
echo "2) Stop"
echo "3) Restart"
echo "4) Status"

read choice

case $choice in
  1)
    echo "Starting service..."
    # Start command here
    ;;
  2)
    echo "Stopping service..."
    # Stop command here
    ;;
  3)
    echo "Restarting service..."
    # Restart command here
    ;;
  4)
    echo "Checking service status..."
    # Status command here
    ;;
  *)
    echo "Invalid option. Please choose a number between 1 and 4."
    ;;
esac

파일 확장자에 따른 작업 수행

#!/bin/bash

filename="example.txt"

case "$filename" in
  *.txt)
    echo "This is a text file."
    ;;
  *.jpg | *.png)
    echo "This is an image file."
    ;;
  *.sh)
    echo "This is a shell script."
    ;;
  *)
    echo "Unknown file type."
    ;;
esac

명령줄 인수 처리

#!/bin/bash

message=''
while [[ $# -gt 0 ]]; do
    case "$1" in
    -m | --message)
        message="$2"
        shift 2
        ;;
    *)
        echo "Unknown argument: $1"
        exit 1
        ;;
    esac
done

Loading script...