| shell tip (for문, if문) |
| 글 쓴 이 |
linux |
| 날 짜 |
2003년 04월 03일 10시 46분 38초 |
| 본 문 |
shell script을 작성하다 보면 조건식을 사용하게 된다.
조건식은 if문, while문에서 사용되어 진다.
다른 프로그램 언어를 보면 = > < >= <= 같은 비교 연산자가 있어서
비교 연산을 수행하는 문장이 조건식이 된다.
그러나 shell script에서는 조건식의 의미가 조금 다르다. shell scrip에서
조건식이라고 하는 부분은 test 라는 이름의 실행 파일에 의하여 그 판단되어
진다. shell script의 조건식에서 사용가능한 조건들이 어떤것들이 있는지
알려면 test라는 명령의 사용법을 알아야 한다.
(* man test하면 main if와 같은 manual이 나온다. *)
1.실습 1
#> test 3 = 4
#> echo $?
1 # FALSE
#> test 3 = 3
#> echo $?
0 # TRUE
#> test 3 < 4
cannt open 4 # < 와 > 는 redirect 기호임으로
# 그냥 사용하면 안된다.
#> test 3 \< 4 # \(백슬러시)를 앞에 붙여서 사용해야 한다.
#> echo $?
0 # TRUE
2. test 에서 사용되는 비교 연산.
* 문자열 비교 연산
s1 > s2 크다.
s1 < s2 작다.
s1 >= s2 크거나 같다.
s1 <= s2 작거나 같다.
s1 = s2 같다.
s1 != s2 다르다.
-n string string의 길이가 0보다 크면 TRUE
환경변수가 정의되어 있는지 확인하는데 사용.
* 정수 연산.
-eq
-ne
-gt
-ge
-lt
-le
* 부정 연산
! condition
3. 실습 2 문자열 연산과 정수 연산의 차이점
#> test 11 < 2; echo $? # 문자열로 비교한다.
0 # TRUE
#> test 11 -le 2; echo $? # 정수로 비교한다.
1 # FALSE
4. test 에서 사용되는 파일 관련 연산.
-a filename # file이 존재하면 TRUE
-d filename # file이 디렉토리이면 TRUE
-e filename # file이 존재하면 TRUE, -a와 동일
-r filename # file을 읽을 수 있으면 TRUE
-w filename # file에 쓰기가 가능하면 TRUE
-x filename # file을 실행할 수 있으면 TRUE
f1 -nt f2 # f1 file이 존재하고 f2보다 새로운
# 파일이면 TRUE
이밖에도 여러가지 다양한 기능들이 있다. man test를 사용하여
추가적인 명령을 확인할 수 있다.
5. 실습 3 파일의 처리
* a.sh에 다음의 내용을 포함한다.
if [ -w $1 ] # 파일에 쓰기가 가능한지 확인하는
then # shell script
echo can write to $1
else
echo cannot write to $1
fi
#> ksh a.sh /etc/passwd
cannot write to /etc/passwd
if문 사용
───────────────────────────────────────
1. if문 구문
if condition
then
action
fi
if condition
then
true_action
else
false_action
fi
if condition
then
action_1
elif condition # else if 문장.
action_2
else
action_3
fi
2. if문에서 조건식 사용하기
그냥 if문은 조건식을 처리할 능력이 없다. 단지 test라는 프로그램을
호출하여 사용할 수 있는 기능을 가지고 있다.
if 문의 조건식 부분에 대괄호기호 ([. ]) 안에 test 프로그램에서 사용할
수 있는 조건식을 그대로 입력하면 된다.
#> if [ -e /etc/passwd ] # 주의 [와 ] 기호와 조건식 사이에 한개
# 이상의 공백이 있어야 한다.
#> if `test -e /etc/passwd` # if문에 조건식을 사용하는 다른 방법
# `는 역따옴표임.
# 역따옴표 사이에 다른 프로그램을 사용하여
# 조건식을 구현할 수 있다.
for문 사용
───────────────────────────────────────
shell scrip의 for문은 프로그램 언어의 for문과 다르다. 프로그램언어의
for문은 한개 숫자변수의 값을 증가시키면서 반복을 수행하는데
shell script의 for문의 문자열 목록을 주고 그 목록에 포함된 문자열을을
한개의 환경변수에 넣고, 목록에 포함된 문자열의 수만큼 반복한다.
1. for문 구문
for word in word_list # word : 반복에 사용될 환경변수
do # wordlist : 반복되는 문자열들의 목록
actions # 반복될 명령들, 여러줄
done
2. 실습 1
아래 예제에서 N은 for문 내에서 반복될 때마다 다른 @? 가지게 되는
환경변수이다. for 문내에서는 N을 $N으로 사용하고 있다.
#> for N in aa bb cc # 화면에 in 뒤에 있는 문자열 aa,bb,cc가
> do # 차례로 출력된다.
> echo $N
> done
3. 실습 2
아래 예제는 in 다음에 ls에서 처럼 파일명의 일부를 지정한다.
in 다음에 파일명을 일부를 지정하면 ls에서 출력될 파일목록이 wordlist로
사용되어진다.
이 예제는 특정한 파일들(확장명이 .c인것등) 만 찾아서 특별한 일을 하는
경우에 유용하다.
#> for N in /etc/*tmp
> do
> echo FILES $N
> done
아래의 예제는 *.txt를 모두 찾아서 화면에 출력하는 예이다.
#> for N in *.txt
> do
> echo FILENAME : $N
> cat $N
> done
4. 실습 3
아래의 예제는 in 다음에 역따옴표를 사용하여 다른 프로그램을 수행한 후
그 결과를 사용하는 방법이다.
find로 하위 디렉토리를 포함하여 확장명이 *.txt인 파일을 찾아서 화면에
출력한다. 실습 3와 비슷하지만 하위 디렉토리를 포함하는 것이 다르다.
#> for N in `find . -name *.c -print` # `는 역슬러시임.
> do
> echo FILENAME : $N
> cat $N
> done
|
|
|
|