본문 바로가기
IT 지식정리/운영체제

[Linux shell script 9] 리눅스 쉘스크립트: case,while,until 사용법 2015. 2. 12.

by G. Hong 2017. 11. 4.
728x90
반응형

리눅스의 쉘스크립트에서 case, while, until 과 같은 흐림제어문을 사용하는 방법에 대해서 알아보도록 하겠습니다.


흐름제어와 관련해서는 if에 대해서 지난 포스팅에 올려보았습니다.

이번에는 case와 while,until에 관한 내용입니다.


case문은 embeded프로그래밍에서는 많이 사용하지 않았었는데요.. 이번에 접해보니, 리눅스와 같은 OS에서는 선택형 메뉴와 같은 부분에서는 자주 쓰일 수 있을 거 같다는 생각이 들었습니다.

1. case


case의 사용법은 아래와 같습니다.

case word in

    patterns ) commands ;;

esac

다른 예시들을 보니 모든 pattern에 대한 명령어뒤에 ;;가 붙어 있지만, "나머지"에 해당하는 * 부분에는 ;;가 안붙으니 주의 바랍니다.


a,b,c 중에 하나의 값을 입력받아서 입력한 값이 무엇인지 출력하는 스크립트입니다.

$cat t004

#!/bin/bash


echo -n "Please enter a,b, or c > "

read cha

case $cha in

    a ) echo "You entered a."

        ;;

    b ) echo "You entered b."

        ;;

    c ) echo "You entered c."

        ;;

    * ) echo "You did not enter a,b, or c."

esac


a,b,c 그리고 t를 입력하였을 때의 결과입니다.

$./t004

Please enter a,b, or c > a

You entered a.

$./t004

Please enter a,b, or c > b

You entered b.

$./t004

Please enter a,b, or c > t

You did not enter a,b, or c.


2. while과 until

while과 until은 상당히 유사한 방식의 loop조건문입니다.

while이 ture일때 동작하는 것 이라면, until은 false일때 동작하는 것 입니다.


아래 예제에서는 while은 "num<5" , until은 "num>=5"가 조건으로 들어갔으나, 동일한 결과가 나왔습니다.

$cat t_while

#!/bin/bash


num=0

while [ "$num" -lt 5 ]; do

echo "Number = $num"

num=$((num + 1))

done


$./t_while

Number = 0

Number = 1

Number = 2

Number = 3

Number = 4


$cat t_until

#!/bin/bash


num=0

until [ "$num" -ge 5 ]; do

echo "Number = $num"

num=$((num + 1))

done


$./t_until

Number = 0

Number = 1

Number = 2

Number = 3

Number = 4


3. until과 case를 활용한 선택형 메뉴 예제

이제 until과 case 2개를 활용하여서 선택형 메뉴가 나오는 스크립트를 만들어보겠습니다.


$cat t_sel

#!/bin/bash


sel=

# 0이 선택될 때 까지 실행되도록 합니다.

until [ "$sel" = "0" ]; do

        echo "

        Select the command:

        1 - ls -al

        2 - df

        3 - free


        0 - exit

"

        echo -n "Enter > "

        read sel

# 입력된 값에 따라서 실행되는 내용들을 case로 선택합니다.

        case $sel in

                1 ) ls -al ;;

                2 ) df ;;

                3 ) free ;;

                0 ) exit ;;

                * ) echo "please enter 1,2,3 or 0"

        esac

done


메뉴선택을 통해서 ls -al, df, free 커맨드를 실행하는 결과입니다.

매 출력마다 화면이 clear되는 부분을 입력하면 보기도 좋을 것 같다는 생각이 듭니다.

$./t_sel


        Select the command:

        1 - ls -al

        2 - df

        3 - free


        0 - exit


Enter > 1

total 20

drwxr-xr-x. 2 gyhong gyhong 4096 Feb 12 16:13 .

drwxr-xr-x. 5 root   root   4096 Jan  9  2006 ..

-rwxr-xr-x. 1 gyhong gyhong  268 Feb 12 16:13 t_sel

-rwxr-xr-x. 1 gyhong gyhong   97 Feb 12 16:03 t_until

-rwxr-xr-x. 1 gyhong gyhong   97 Feb 12 16:02 t_while


        Select the command:

        1 - ls -al

        2 - df

        3 - free


        0 - exit


Enter > 2

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda2       50264772 5139356  42565416  11% /

tmpfs            3087992      72   3087920   1% /dev/shm

/dev/sda1         487652   56042    406010  13% /boot


        Select the command:

        1 - ls -al

        2 - df

        3 - free


        0 - exit


Enter > 3

             total       used       free     shared    buffers     cached

Mem:       6175984    1218416    4957568          0     169856     469080

-/+ buffers/cache:     579480    5596504

Swap:      8191996          0    8191996


        Select the command:

        1 - ls -al

        2 - df

        3 - free


        0 - exit


Enter > 4

please enter 1,2,3 or 0


        Select the command:

        1 - ls -al

        2 - df

        3 - free


        0 - exit


Enter > 0

$

728x90
반응형