Bash Shell Script - Case 조건문

By JS | Last updated: October 07, 2021

Linux의 Bash shell script의 Case 조건문에 대해서 알아보겠습니다. Case는 다른 언어의 Switch-Case와 같은 문법입니다.

1. Syntax

Case의 문법은 다음과 같습니다.

case expression in  
    pattern_1)  
        statements  
        ;;  
    pattern_2)  
        statements  
        ;;  
    pattern_3|pattern_4|pattern_5)  
        statements  
        ;;  
    *)  
        statements  
        ;;
esac  
  1. expression와 일치하는 pattern)가 있다면, 그 블럭의 statements가 수행됩니다.
  2. pattern_3|pattern_4)와 같이 | 연산자를 이용하여 다수의 조건을 하나의 패턴에 적용할 수 있습니다.
  3. 조건에 일치하지 않는 항목들은 *)에서 처리되도록 만들 수 있습니다. Java의 default와 같습니다.

2. Case를 사용하는 예제 (1)

다음과 같이 Case를 이용하여 var에 해당하는 조건문을 수행할 수 있습니다.

#!/bin/bash

var=1
case $var in
  1)
    echo "Apple"
    ;;
  2)
    echo "Grape"
    ;;
  3)
    echo "Kiwi"
    ;;
esac

Output:

$ bash example.sh
Apple

3. Case를 사용하는 예제 (2)

다음은 User Input을 받아 특정 문자열을 출력합니다. 여러 조건을 하나의 패턴에 추가하였고, 일치하는 패턴이 없을 때는 *)에서 처리하도록 했습니다.

#!/bin/bash

read -p "Yes or No? : " Answer

case $Answer in
  Yes|yes|y|Y)
    echo "You typed 'Yes'"
    ;;  
  No|no|N|n)  
    echo "You typed 'No'"
    ;;
  *)
    echo "Invalid answer"
esac

Output:

$ bash example.sh
Yes or No? : Y
You typed 'Yes'

$ bash example.sh
Yes or No? : No
You typed 'No'

$ bash example.sh
Yes or No? : NO  
Invalid answer

4. Case를 사용하는 예제 (3)

다음은 정규표현식 같은 패턴을 사용하는 예제입니다.

#!/bin/bash

read -p "Type something : " Answer

case $Answer in
  a?)
    echo "a? pattern"
    ;;  
  b*)  
    echo "b* pattern"
    ;;
  c[def])
    echo "cd | ce | cf"
    ;;
  *)
    echo "Invalid answer"
    ;;
esac
  1. ? : 어떤 문자 1개를 의미합니다. a? 패턴은 a로 시작하고 뒤에 어떤 문자 1개가 있을 때 일치한다고 판단합니다.
  2. * : 1개 이상의 어떤 문자들을 의미합니다. a* 패턴은 a로 시작하고 뒤에 1개 이상의 문자들이 있을 때 일치한다고 판단합니다.
  3. [abc] : [abc]는 문자 a 또는 b 또는 c 중에 하나를 의미합니다. a[bc] 패턴은 ab, ac와 일치한다고 판단합니다.

위 코드의 실행결과를 보시면 이해가 빠릅니다.

$ bash example.sh
Type something : a
Invalid answer

$ bash example.sh
Type something : a1
a? pattern

$ bash example.sh
Type something : a22
Invalid answer

$ bash example.sh
Type something : bbaabbaa
b* pattern

$ bash example.sh
Type something : cd
cd | ce | cf

$ bash example.sh
Type something : cdd
Invalid answer
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha