Skip to main content

9. Case

case 문을 사용하면 if .. then .. else 문 전체를 살펴보는 수고를 덜 수 있습니다. 구문은 정말 간단합니다:

#!/bin/sh
echo "Please talk to me ..."
while :
do
  read INPUT_STRING
  case $INPUT_STRING in
        hello)
                echo "Hello yourself!"
                ;; 
        bye)
                echo "See you again!"
                break
                ;;
        *)
                echo "Sorry, I don't understand"
                ;;

  esac 
done
echo
echo "That's all folks!"

좋아요, 세계 최고의 대화 상대는 아니며 단지 예시일 뿐입니다!

실행해보고 어떻게 작동하는지 확인해 보세요...

$ ./talk.sh
Please talk to me ...
hello
Hello yourself!
What do you think of politics? 
Sorry, I don't understand
bye
See you again!
That's all folks!
$

구문은 매우 간단합니다: case 구분 줄 자체는 항상 같은 형식이며, 이는 변수 INPUT_STRING의 값을 테스트하고 있음을 의미합니다.

그런 다음 우리가 이해하는 옵션이 나열되고 그 뒤에 대괄호로 hello) 및 bye)가 이어집니다. 즉, INPUT_STRING이 hello와 일치하면 해당 코드 섹션이 이중 세미콜론까지 실행되고, INPUT_STRING이 "bye"와 일치하면 "goodbye"메시지가 인쇄되고 루프가 종료됩니다. 스크립트를 완전히 종료하려면 break 대신 exit 명령을 사용해야 합니다. 여기서 세 번째 옵션인 *)는 기본 catch-all 조건으로, 필수는 아니지만 test 변수의 값을 알고 있다고 생각되는 경우에도 디버깅 목적으로 유용할 때가 많습니다.

전체 case 문은 esac(대소문자를 거꾸로!)으로 끝내고, done으로 while 루프를 종료합니다.

Case 조건은 복잡하기는 하지만 매우 유용하고 강력한 도구가 될 수 있습니다. case 조건은 셸 스크립트에 전달된 매개변수를 구문 분석하는 데 자주 사용되며, 다른 용도로도 사용됩니다.