조건문의 형식
쉘 스크립트의 조건문은 if로 시작하여 [ ] 괄호로 묶여지며, [ ] 괄호 내에의 조건식은 괄호와 공백이 있어야 한다.
예를 들어[ -f /etc/passwd ]
의 경우 시작 괄호 '['와 '-f' 사이에는 공백이 꼭 필요하다.
조건문의 끝은 ;로 표현 되며, 만일 then 문장을 입력할 때는 ;를 생략해도 된다.
if [ 조건 ]; then
문장
elif [ 조건 ]; then
문장
else
문장
fi
test 명령어
test 명령어는 뒤에오는 조건식을 검사하여 참, 거짓 여부를 판단 할 수 있다. 주로 파일 존재 유무, 타입, 권한을 체크 할 때 사용 된다.
test 명령어는 아래 두가지 형태로 조건문에서 사용 가능하다.
test expressions
or
[ expressions ]
산술 비교 연산자
제어문 | 설명 |
val1 –eq val2 | equal, 변수 val1과 변수 val2 같은 경우 true |
val1 –ne val2 | negative, 변수 val1과 변수 val2 다른 경우 true |
val1 –gt val2 | greater then, 변수 val1이 변수 val2 보다 큰 경우 true |
val1 –lt val2 | less then, 변수 val1이 변수 val2 보다 작은 경우 true |
val1 –ge val2 | greater or equal, 변수 val1이 변수 val2 보다 크거나 같은 경우 true |
val1 – le val2 | less or equal, 변수 val1이 변수 val2 보다 작거나 가은 경우 true |
파일 검사 연산자
제어문 | 설명 |
-a | 파일이 존재한 경우 true |
-b | 파일이 존재하고 블록장치 파일인 경우 true |
-c | 파일이 존재하고 캐릭터 장치 파일인 경우 true |
-d | 파일이 존재하고 디렉토리인 경우 true |
-e | 파일이 존재하고 파일이 있는 경우 true |
-f | 파일이 존재하고 정규 파일인 경우 true |
-g | 파일이 존재하고 SetGID가 설정된 경우 true |
-h | 파일이 존재하고 한 개 이상의 심볼릭 링크가 설정된 경우 true |
-k | 파일이 존재하고 Sticky bit가 설정된 경우 true |
-p | 파일이 존재하고 FIFO인 경우 true |
-r | 파일이 존재하고 읽기 가능한 경우 true |
-s | 파일이 존재하고 0보다 큰 경우 true |
-u | 파일이 존재하고 SetUID가 설정된 경우 true |
-w | 파일이 존재하고 쓰기가 가능한 경우 true |
-x | 파일이 존재하고 실행 가능한 경우 true |
문자열 비교 연산자
제어문 | 설명 |
-z string | 문자열의 길이가 0인 경우 true |
-n string | 문자열의 길이가 0이 아닌 경우 true |
string1 = string2 | 문자열 string1과 string2가 일치하는 경우 |
string1 != string2 | 문자열 string1과 string2가 일치하지 않는 경우 |
string | 문자열이 NULL이 아닌 경우 |
예제
#!/bin/bash
# $# 입력 받은 매개 변수의 개수를 의미
if [ $# -lt 1 ]; then
echo “$0 <Account>…”
exit 0
fi
# 명령의 결과를 저장하기 위해 `( back quarter)를 사용했다.
# ‘(single quarter)과 혼동 할 수 있으므로 주의 하도록 한다.
ret=`grep –w “^$1” /etc/passwd`
if test –n “$ret” ; then
echo $ret
else
echo “User not found”
fi
부록 1. 같이 보면 좋은 글