본문 바로가기
리눅스 (Linux)

IF 와 CASE

by 멸치김밥 2021. 12. 21.
  • IF
#!/bin/bash
if [ 조건 ]; then
    참이면 이곳의 명령을 실행
elif [ 조건 ]; then
    if가 거짓일때 elif가 참이면 이곳을 실행
else
    둘다 아닐 때 이곳을 실행
fi
#!/bin/bash
# if.sh
a=10
b=20
if [ $a == $b ]; then
    echo "a는 b랑 같다"
elif [ $a -gt $b ]; then
    echo "a가 b보다 커요"
elif [ $a -lt $b ]; then
    echo "a가 b보다 자가용"
else
    echo "아무 조건에도 해당이 안되네여"
fi
$ ./if.sh
a가 b보다 자가용

쉘 스크립트에선 if가 끝나면 fi로 닫아(?)주어야 한다.

else if 대신 쉘 스크립트에선 elif 라고 쓴다.

if [ $a == $b ]; then

if [$a == $b ]; then

띄어쓰기 하나 차이로 잘못되기 때문에 유의 해야한다.

if가 참일때 실행될

    echo "a는 b랑 같다" 

같은 경우는 제일 앞의 여백이 몇 칸이던 딱히 상관이 없는듯 하다.


  • CASE

case는 기준 문자열 에서 특정 문자열을 찾아 일치하면 그 안에 있는 명령을 실행한다.

#!/bin/bash
case [기준문자열] in
[문자열1])
    [명령1]
    ;;
[문자열2])
    [명령2]
    ;;
[문자열3]|[문자열4])
    [명령3]
    ;;
*)
    [명령4]
esac

case가 끝나면 esac 으로 닫아준다 (아니면 오류남)

;; 는 다른 언어에서 break와 같은 역할을 한다

브레이크가 없다고 해서 다음 문자열로 넘어가는게 아니라 그냥 오류가 난다.

필요에 따라 [문자열3]|[문자열4]) 처럼 사이에 | 를 붙여 [문자열3] 또는 [문자열4]에 해당하면,... 과 같이 OR조건을 줄 수도 있다.

*) 같은 경우는 와일드 카드 라고 한다.

위처럼 사용할 경우 [문자열1]~[문자열4]까지 아무것도 해당하지 않을 때 *에 일치하는것이 되어 [명령4]가 실행된다.

*) 가 없을 경우라면 [문자열1]~[문자열4]까지 아무것도 해당하지 않을 때 그냥 case문을 빠져나간다.

 

  • 와일드 카드

* : 없는것을 포함한 문자의 개수에 제한없이 일치하는것으로 간주

? : ? 의 개수만큼 문자수가 일치하는것으로 간주

a[bcd] : ab, ac, ad 처럼 대괄호 [ ] 안에 있는 문자들중 하나라도 일치하면 된다.

이 외에도 더 다양한 와일드 카드가 있다고 한다.

 

#!/bin/bash
# case.sh
FRUIT="kiwi"

case "$FRUIT" in
"apple")
    echo "사과는 맛있어"
    ;;
"banana")
    echo "맛있으면 바나나"
    ;;
"kiwi")
    echo "키위는 뉴질랜드"
    ;;
esac
$ ./case.sh
키위는 뉴질랜드

 

기준문자열과 찾을 문자열에 변수나 전달인자를 활용할 수도 있다

#!/bin/bash
# case2.sh
option="${1}"

case "${option}" in
f)
    FILE="${2}"
    echo "파일명은 $FILE임"
    ;;
d)
    DIR="${2}"
    echo "디렉토리명은 $DIR임"
    ;;
*)
    echo "파일/디렉토리명은 $(basename ${0})"
    ;;
esac
$ ./case2.sh f 김치
파일명은 김치임
$ ./case2.sh d 참치
디렉토리명은 참치임
$ ./case2.sh t 꽁치
파일/디렉토리명은 case2.sh

 

 

'리눅스 (Linux)' 카테고리의 다른 글

While  (0) 2021.12.21
쉘 스크립트로 오늘 날짜 정보가 입력된 파일 생성하기  (0) 2021.12.21
비교 연산자  (0) 2021.12.21
연월 입력받아 달력 출력하기  (0) 2021.12.21
배열  (0) 2021.12.20

댓글