쉘 프로그래밍을 연마하자 (2)
[ 쉘 프로그래밍을 연마하자 (2) ]
필자의 생각이지만 프로그래밍은 어떤 언어나 비슷한 면이 많은것 같다. 쉘 프로그래밍도 마찬가지로 다른 언어를 하나라도 익힌 사람은 아주 쉽게 익힐 수 있을 것이다. 그러면 쉘 프로그래밍 두번째를 시작하도록 하자.
* 조건문
앞으로 익힐 if 나 while등의 구문은 모두 조건문을 달고 실행된다. C언어 에서는 조건문이라면 < , > , = 등의 기호를 이용해서 모두 간단하게 표시 할 수 있지만 본 쉘 프로그래밍 에서는 조금 까다롭다. 모든 비교문은 []안에 표시하고 [의 뒤와 ]의 앞에는 꼭 공백을 넣어야 한다. 띄여 쓰기 한번 잘 못하면 버그 잡기가 아구 골치아파진다. []의 조건에 일치하면 참 값이 되고 일치 하지 않으면 거짓이 된다.
덧붙여서 모든 조건식의 앞에 ! 를 추가하면 그 조건식의 부정이 참이 된다. 그리고 -a (and) 와 -o (or)을 이용하여 복합조건구문을 만들 수 도 있다.
- 숫자 비교. ()안에는 C언어의 예를 들었다.
[ $A -eq $B ] A와 B의 값이 같을 조건 ( A == B )
[ $A -ne $B ] A와 B의 값이 다를 조건 ( A != B )
[ $A -gt $B ] A의 값이 B보다 클 조건 ( A > B )
[ $A -lt $B ] A의 값이 B보다 작을 조건 ( A < B )
[ $A -ge $B ] A의 값이 B보다 크거나 같을 조건 ( A >= B )
[ $A -le $B ] A의 값이 B보다 작거나 같을 조건 ( A <= B )
모두 수의 크기를 비교할때 쓰이며 , 소수점 이하는 무시된다.
- 파일 비교.
[ -s filename ] file이 존재하며 크기가 0보다 큰 조건
[ -f filename ] 디렉토리의 경우를 제외한 file인 조건(크기 0 포함)
[ -w filename ] 쓰기가 가능한 조건
[ -r filename ] 읽기가 가능한 조건
[ -d directoryname] file이 아닌 디렉토리인 조건
- 문자열 비교
[ "linux" = "gnu" ] 두 문자열이 같은 조건
[ "linux" != "gnu" ] 두 문자열이 다른 조건
[ -z "linux" ] 문자열의 길이가 0 인 조건
[ -n "gnu" ] 문자열의 길이가 0 이 아닌 조건
문자열은 ""로 묶어 주어도 되고 문자열을 값으로 가지는 변수여도 된다.
* if 문
형식:
if [조건문]
then
수행할 명령어들
elif [조건문]
then
수행할 명령어들
else
수행할 명령어들
fi
if 다음에는 조건문이 따라야 하며 then 다음에 수행할 명령어들을 써주고, elif 나 else는 생략가능하다. 하지만 then 이나 fi 는 절대 생략해서는 안 된다. if 문이 끝날때는 fi를 꼭 써주어야 하며 if의 개수와 fi의 개수는 일치해야한다. 각라인을 붙여써서는 안되며 라인당 하나의 명령어만 쓰도록 한다. 위의 조건식과 더불어 if 문의 예제를 여러 개 들어본다.
----[예제3] linuxer.sh ----------------------------
#!/bin/sh
linuxer=1000000
windog=5000
if [ $linuxer -lt $windog ]
then
echo "윈도우즈 사용자 수가 더 많다"
elif [ $linuxer -eq $windog ]
then
echo "윈도우즈 사용자의수와 리눅서의 수 동일"
else
echo "리눅스 세계정복!"
fi
----------------------------------------------------
----[예제3-1] backup.sh ----------------------------
#!/bin/sh
if [ -f .bashrc ]
then
echo "File existed "
elif [ -f .bashrc.old ]
then
cp .bashrc.old .bashrc
echo "File Backup Succeed"
else
echo "Error"
fi
-----------------------------------------------------
우선 .bashrc란 화일이 존재하는 지 확인한후 존재하지 않는다면 .bashrc.old 란 화일을 찾아서 있다면 카피해 놓는 프로그램이다. 백업이 아니라 백업된 것을 카피해 오는 프로그램쯤 이라고 생각하면 쉽다.
* argument의 사용
argument라 함은 ls -la profile 이라는 명령을 내렸을때 -la , profile등 각각의 인자를 말한다. 본 쉘 프로그래밍에서는 $1, $2 ,$3 등으로 각각의 argument를 사용할 수 가 있다. 위의 예를 보자면 $1="-la"가 될것이고 $2="profile" 이 될 것이다. 각 argument의 개수는 $# 이고 모든 argument는 $*로 표현한다.
----[예제3-2] iden.sh ----------------------------
#!/bin/sh
BOSS="홍길동"
BABO="이국현"
if [ $1 = $BOSS ]
then
echo "보스! 오랜만입니다!"
elif [ $1 = $BABo ]
then
echo "바보야! 오랜만이다!"
fi
--------------------------------------------------
사용예)
[errai@baboman linuxstart]$ ./iden.sh 홍길동
보스! 오랜만입니다!
[errai@baboman linuxstart]$ ./iden.sh 이국현
바보야! 오랜만이다!
[errai@baboman linuxstart]$
다음에는 for , while , until, case 구문에 대해 설명해보겠습니다. 마지막까지 열심히 해봅시다!
[출처] 쉘 프로그래밍을 연마하자 (2)|작성자 박신양
'프로그래밍 > BASH SHELL' 카테고리의 다른 글
정규식 이해 (0) | 2015.01.27 |
---|---|
쉘 명령 기초 (0) | 2015.01.27 |
쉘 프로그래밍 (shell programming) (0) | 2015.01.27 |
쉘 프로그래밍을 연마하자 (3) (0) | 2015.01.27 |
쉘 프로그래밍을 연마하자 (1) (0) | 2015.01.27 |