쉘 프로그래밍을 연마하자 (3)
[ 쉘 프로그래밍을 연마하자 (3) ]
이번 강좌에서는 분기문에 대해서 배워보도록 하자. 본쉘에서의 분기문은 C언어와 비슷한 면도 있고 약간 다른것도 있지만 대체적으로 그 사용법이 간결하여 배우기가 쉽다. 그러면 하나하나 익혀보자.
* for 문
형식:
for 변수 in list1 list2 list3
do
명령어들
done
C언어의 for와는 많이 다른 형태의 for문이다. in 뒤에 나오는 원소를 변수에 대입시킨다. 그리고 그 원소들의 개수만큼 반복되어 do 뒤에 나오는 명령어들을 실행한다. 직접 프로그래밍해 보는것이 제일 쉽게 이해될 듯 하다.
----[예제4] for.sh ----------------------------
#!/bin/sh
for A in 1 2 3 4 5
do
echo $A
done
-----------------------------------------------
설명이 잘 이해가 되지 않아도 소스 몇 줄로 쉽게 이해가 되었을 것으로 믿는다. 예제4를 조금 더 응용해 보자.
----[예제4-1] pid.sh ----------------------------
#!/bin/sh
for A in `ps -aux | cut -c10-15`
do
echo $A
done
-------------------------------------------------
예제4-1은 현재 떠있는 모든 프로세스의 번호를 보여주는 쉘 스크립트 이다. 좀 더 유용한 스크립트 하나를 더 예로 들어보자.
----[예제4-2] change.sh --------------------------
#!/bin/sh
for A in *
do
mv $A `echo $A | tr [A-Z] [a-z]`
done
--------------------------------------------------
이 스크립트를 실행시키면 현재 디렉토리에 있는 모든 대문자화일을 소문자로 바꿔 준다. in 뒤에 그냥 * 표시를 써주면 현재 디렉토리에 있는 모든 화일들을 원소로 쓰게 된다. 단 .으로 시작하는 화일은 포함되지 않는다. 그것을 tr 명령어를 이용해 하나하나 대문자를 소문 자로 바꿔주게 되고, 그것을 mv 명령어를 이용해 파일이름을 바꾸는 것이다.
* while 문
형식:
while 조건문
do
명령어들
done
while문은 C언어의 그것과 일치한다. 별 다른 설명 필요없이 예제를 보도록 하자.
----[예제5] while.sh ---------------------------
#!/bin/sh
haha=1
while [ $haha -lt 10 ]
do
echo "Puhaha~"
haha=`expr $haha + 1`
done
------------------------------------------------
haha란 변수에 1을 대입하고 , 그것이 10 보다 작을 동안에 계속 루프 를 돌게 된다. 본쉘에서 숫자 계산을 할때는 expr명령어를 사용해야 한다.
* until 문
형식:
until 조건문
do
명령어들
done
while 문과는 반대로 조건문이 참이면 루프를 끝낸다.
----[예제6] until.sh ---------------------------
#!/bin/sh
until who | grep errai
do
sleep 5
done
echo -e "a--COME BACK errai!--"
------------------------------------------------
who명령어를 통해 현 계정 접속자를 검색하여 그중 errai란 사용자가 있다면 루프를 종료하고 문장을 출력시키는 스크립트이다.
while이나 until문을 돌릴 경우 조건문의 값이 0 보다크다면 항상 참값이 되어 무한루프를 돌게 된다. 그때 사용되는 명령어가 continue 와 break이다. 둘다 C언어의 그것과 용도가 같다. 루프문의 수행도중 continue를 만나면 그 이하의 내용은 모두 생략하고 다시 조건검사로 돌아가게 되고 break는 루프문을 강제로 빠져 나올때 사용하게 된다.
----[예제6-1] stupid.sh --------------------------
#!/bin/sh
while [ 1 ]
do
echo -n "리눅스가 좋아?(예/아니오) : "
read a
if [ x$a = "x예" ]
then
break
else
continue
fi
done
echo "GOOD!"
-------------------------------------------------
금방 이해가 되었을 것이라 믿는다. 한가지만 말하자면 if 문의 조건식에서 그냥 $a = "예" 라고 하면 될 것을 각각 앞에 x자를 붙인 것이 보이는데 이것은 $a에 아무런 값도 대입하지 않았을때 에러가 나는 것을 막기 위함 이다. 한번 x를 없애고 실행시켜 보기 바란다.
* case 문
형식:
case 변수 in
패턴1 | 패턴2 .... ) 명령어들;;
*) 명령어들;;
esac
변수값에 따라 다른 명령어를 수행해야 할 때 유용한 명령어이다. C언어의 그것과 유사하다.
----[예제7] vowel.sh ---------------------------
#!/bin/sh
echo -n "what is your favorite food? "
read answer
a="a"
case "$answer" in
a* | e* | i* | o* | u* ) a="an";;
esac
echo You like $a $answer!
-----------------------------------------------
영단어를 입력받아 단어가 모음으로 시작되느냐 자음으로 시작 되느냐에 따라 관사 an 혹은 a를 붙여주는 스크립트이다.
다음에는 c 쉘에 관해 공부해 보도록 하겠다.
[출처] 쉘 프로그래밍을 연마하자 (3) |작성자 박신양
'프로그래밍 > BASH SHELL' 카테고리의 다른 글
정규식 이해 (0) | 2015.01.27 |
---|---|
쉘 명령 기초 (0) | 2015.01.27 |
쉘 프로그래밍 (shell programming) (0) | 2015.01.27 |
쉘 프로그래밍을 연마하자 (2) (0) | 2015.01.27 |
쉘 프로그래밍을 연마하자 (1) (0) | 2015.01.27 |