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