리눅스의 쉘스크립트에서 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
$
'IT 지식정리 > 운영체제' 카테고리의 다른 글
[Linux shell script 11] 리눅스 쉘스크립트: for 사용법 2015. 2. 13. (0) | 2017.11.04 |
---|---|
[Linux shell script 10] 리눅스 쉘스크립트: 포지션(position parameter) 2015. 2. 13. (0) | 2017.11.04 |
[Linux shell script 8] 리눅스 쉘스크립트: 키보드입력, read 2015. 2. 12. (0) | 2017.11.04 |
[Linux shell script 7] 리눅스 쉘스크립트 숫자연산 2015. 2. 12. (0) | 2017.11.04 |
[Linux shell script 6] 리눅스 쉘스크립트: if사용법 2of2 2015. 2. 10. (0) | 2017.11.04 |