C.W.K.
Stream
Lesson 05 of 12 · published

Case 문

~8 min · case, switch

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

shell 의 switch

case "$1" in
  start)   ./serve.sh & ;;
  stop)    pkill -f serve.sh ;;
  status)  pgrep -fa serve.sh ;;
  *)       echo "usage: $0 {start|stop|status}"; exit 2 ;;
esac

각 가지는 ;; 로 끝. 패턴은 glob 스타일 (*, ?, [abc]) 첫 매치 승. *) 가 default.

가지마다 패턴 여러 개

case "$ext" in
  jpg|jpeg|png|gif|webp) echo image ;;
  mp4|mov|webm)          echo video ;;
  *.bak|*~|*.tmp)        echo trash ;;
  *)                     echo other ;;
esac

fallthrough (bash 4+, zsh)

;;& 로 끝내면 다음 패턴들도 계속 테스트. ;& 면 다음 가지의 본문으로 fallthrough. 드물지만 유용.

case 가 if 를 이기는 때

elif 를 두 번 넘게 string equality 로 쓰고 있으면 case 로 갈아탈 시점. 더 평평하고 가독성 좋고 빠름. shell 스크립트의 CLI 분기 (start|stop|status|reload) 다수가 case.

Code

서비스 스타일 분기·bash
#!/usr/bin/env bash
set -euo pipefail
case "${1:-}" in
  up)    docker compose up -d ;;
  down)  docker compose down ;;
  logs)  docker compose logs -f "${2:-}" ;;
  '')    echo 'usage: dev {up|down|logs}' >&2; exit 2 ;;
  *)     echo "unknown subcommand: $1" >&2; exit 2 ;;
esac

External links

Exercise

categorize.sh path 작성 — 파일 확장자 기준 case 로 image / video / archive / source / other 출력. 본인 파일 몇 개로 테스트.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.