여러 if-elif가 길어질 때 case가 깔끔합니다.
하나의 값에 대해 여러 패턴 매칭, 각 패턴에 다른 처리.
다른 언어의 switch에 해당.
기본 형식.
case "$var" in / pattern1) ...;; / pattern2) ...;; / *) 기본;; / esac.
패턴 뒤 ), 처리 후 ;;(두 세미콜론), 마지막 esac(case 거꾸로).
패턴.
와일드카드 사용 가능.
*.txt — 「.txt로 끝남」.
[Yy]*) — 「Y 또는 y로 시작」.
*) — 「모두 일치」(기본 케이스).
| 로 OR — 1|2|3) ....
활용.
사용자 입력 처리.
case "$choice" in / yes|y) echo "진행"; ;; / no|n) echo "취소"; ;; / *) echo "잘못된 입력"; ;; / esac.
메뉴·옵션 처리에 매우 자연스러움.
함수 인자에.
case "$1" in / start) start_service; ;; / stop) stop_service; ;; / restart) stop_service; start_service; ;; / esac.
「start·stop·restart」 같은 서비스 스크립트의 표준 패턴.
한 줄 요약
case는 다중 분기.
패턴) 처리 ;; 형식, 와일드카드·| OR 활용.
esac으로 끝.
메뉴·옵션 처리·서비스 명령에 깔끔.
if-elif가 길면 case로.
더 알아볼 것
- case의 ;& 와 ;;& fall-through
- getopts와 case 결합
- extglob — 더 강력한 패턴