리눅스에서 Base 스크립트를 작성할 때 사용할 수 있는 조건문 중 `case`문이 있다. 마치 Java에서 switch - case문처럼 Base에서도 조건문을 간단하게 사용할 수 있다.
Bash - case문
Base에서 case문은 다음 문법을 따른다.
case 기준문자열 in
문자열1)
명령
명령
;;
문자열2)
명령
명령
;;
*)
명령
명령
;;
esac
기준문자열에 해당하는 값을 '문자열1', '문자열2'와 비교하여 분기한다. 각 분기의 마지막에는 ;;
를 찍어서 분기의 종료를 알려줘야한다. *)
는 Java의 switch-case 문에서의 default
와 같다. '문자열1', '문자열2'와 같지 않은 모든 경우가 이 곳으로 분기한다.
분기의 조건은 OR 조건으로 여러개를 묶을 수도 있다.
case 기준문자열 in
문자열1|문자열2)
명령1
명령2
;;
문자열3|문자열4)
명령3
명령4
;;
*)
명령
명령
;;
esac
기준문자열이 '문자열1'이거나 '문자열2'인 경우에는 명령1과 명령2를 수행한다. 기준문자열이 '문자열3'이거나 '문자열4'인 경우에는 명령3과 명령4를 수행한다.
case문을 이용한 예제를 살펴보자
COUNTRY=korea
case $COUNTRY in
"korea"|"japan"|"china")
echo "$COUNTRY is Asia"
;;
"USA"|"Canada"|"Mexico")
echo "$COUNTRY is Ameria"
;;
* )
echo "I don't know where is $COUNTRY
;;
esac
Bash - 패턴을 사용한 case문
case문의 강력함은 패턴과 함께 썼을 때 발휘된다.
str="abc"
case $str in
a*)
echo "$str starts with a"
;;
a?)
echo "$str starts with a and has two words"
;;
a[bc])
echo "$str starts with a and then followed by b or c "
;;
* )
echo "I don't know where is $COUNTRY"
;;
esac
bash의 case문은 glob 패턴
을 따른다. 쉘 환경에서 파일 이름을 와일드카드 문자로 다룰 때 사용하는 패턴이다.
와일드카드 | 설명 |
* | 없는 것을 포함한 어떠한 개수의 문자라도 일치 |
? | 임의의 하나의 문자가 일치 |
[abc] | 대괄호 안의 하나의 문자가 일치 |
[a-z] | 대괄호 안의 범위에 속하는 하나의 문자가 일치 |
case문에서 *) 조건이 나머지 모두를 의미하는 이유가 바로 여기에 있다.
댓글