3. OS이야기/03. Shell Script

[UNIX/LINUX] Shell Script 기본 - 5.case문 (1) 기본 사용법 및 예제

알 수 없는 사용자 2014. 5. 7. 13:12

5. case문

 

(1) 기본 사용법 및 예제 


case 변수 in

     경우1)

             ~

             ;;

     경우2)

             ~

             ;;

     경우3)

             ~

             ;;

             ...

esac


case문의 사용법은 아주 간단합니다.

 

shell script를 아무 생각없이 코딩하다 보면 무수히 많은 if문을 남발하게 되고 소스 자체가 지저분해 보이게 되는데 이 때 이 case문만 적절히 사용할 줄 알아도 훨씬 심플하고 보기 좋은 shell script를 작성할 수 있습니다.

 

그럼 바로 예제문을 통해 설명 드리겠습니다.

 

먼저 동일한 결과를 보여주는 if문부터 보도록 하겠습니다.


tmpSize=`df -g /tmp | grep tmp | awk '{print $3}' | cut -d '.' -f 1`
echo 'The size of /tmp filesystem '${tmpSize}' GB'

 

if [ ${tmpSize} -eq 0 ]; then

    chfs -a size=+2G /tmp

    echo 'The size of /tmp filesystem is increased 2GB.'

elif [ ${tmpSize} -eq 1 ]; then

    chfs -a size=+1G /tmp

    echo 'The size of /tmp filesystem is increased 1GB.'

else

    echo 'The size of /tmp filesystem is equal or greater than 2GB.'

fi


예문이 짧아서 if문이나 case문이나 별차이 없어 보이기도 합니다만, 그래도 아래 case문이 더 깔끔해 보이지 않나요?;;;; 

 tmpSize=`df -g /tmp | grep tmp | awk '{print $3}' | cut -d '.' -f 1`
  echo 'The size of /tmp filesystem '${tmpSize}' GB'
  
  case ${tmpSize} in
     0)
        chfs -a size=+2G /tmp
        echo 'The size of /tmp filesystem is increased 2GB.'
        ;;
     1)
        chfs -a size=+1G /tmp
        echo 'The size of /tmp filesystem is increased 1GB.'
        ;;
     *)
        echo 'The size of /tmp filesystem is equal or greater than 2GB.'
        ;;

  esac


위 예제는 AIX에서 /tmp 파일시스템의 사용 가능 용량(free size)에 비추어 파일시스템 크기를 2GB 이상으로 늘려주려는 case문 예제입니다.

 

먼저 첫 번째줄의 명령 구문은 /tmp 파일시스템의 정보를 GB 단위로 가져온 후(df -g /tmp), 제일 윗 줄의 불필요한 row 부분을 제거하고(grep tmp), 세 번째 컬럼인 Free size 정보만 뽑아낸 다음(awk '{print $3}'), 소수점 이하 자리는 제외하고 정수 부분의 값만 가져오겠다(cut -d '.' -f 1)는 뜻입니다.


<참조 - AIX 에서의 df 명령 실행 결과 화면>



위 화면과 같은 상황에서 첫 번째 명령구문을 실행하였다면 output으로 '1'을 반환하겠죠?

 

그렇다면 case문의 ${tmpSize} 변수값에 '1'이 넘어갈 것이고 변수가 '1'일 경우에 실행되는 구문인 'chfs -a size=+1G /tmp' 가 실행될 것입니다.

 

case문에 보이는 '*'(asterisk) 같은 경우는 if문의 else와 같은 용도라고 보시면 되는데요.

 

위 예제에 비추어 설명 드리자면, ${tmpSize} 변수값이 0도 아니고 1도 아닐 경우엔 별다른 명령문 수행없이 echo문만 수행하겠다는 내용이지요.

 

아주 간단하죠?

 

이상 case문에 대한 기본 사용법 및 예제에 대해서 말씀 드렸습니다.