출처 - http://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/index.html
if/then 은 명령어 목록의 종료 상태가 0 (유닉스 관례상 0은 "성공"을 나타내므로)인지 테스트를 해보고 맞다면 다음 명령어들을 실행시킵니다.
테스트 전용 명령어로 [ (왼쪽 대괄호 특수 문자)란 것이 있습니다. test 명령어와 동의어이고, 효율적인 이유로 내장 명령입니다. 이 명령어는 자신의 인자를 비교식이나 파일 테스트로 인식해 해당 연산의 결과에 따른 종료 상태(참은 0, 거짓은 1)를 리턴합니다.
if test condition-true와 if [ condition-true ] 은 완전히 똑같은 표현입니다. [ 는 test 명령어를 부르는 토큰이기 때문에 ] 가 꼭 필요하진 않지만 새 버전의 bash 에서는 그래도 있어야 됩니다.
test 명령어는 파일 타입을 테스트하거나 문자열을 비교해 주는 bash 내장 명령이기 때문에, Bash 스크립트안에서 test는 sh-utils 패키지의 일부분인 /usr/bin/test 외부 명령어를 부르지 않습니다. 비슷하게, [도 /usr/bin/test로 링크되어 있는 /usr/bin/[를 부르지 않습니다.
[[ ]] 는 쉘 상에서 [ ]과 동일합니다. [ ... ] 말고 [[ ... ]] 를 쓰면 많은 논리적 에러들을 막을 수 있습니다. 예를 들어 &&, ||, <, > 연산자들은 [ ] 에서 에러를 내지만 [[ ]] 에서는 잘 동작합니다.
파일 테스트 연산자
-e
존재하는 파일
-f
보통 파일(디렉토리나 디바이스 파일이 아님)
-s
파일 크기가 0 이 아님
-d
파일이 디렉토리
비교 연산자(이진)
-eq
if [ "$a" -eq "$b" ]
-ne
같지 않음
if [ "$a" -ne "$b" ]
문자열 비교
=
if [ "$a" = "$b" ]
==
같음
if [ "$a" == "$b" ]
= 와 동의어입니다.
-z
문자열이 "null"임. 즉, 길이가 0
-n
문자열이 "null"이 아님.
함수
function function_name {
command...
}
혹은
function_name () {
command...
}
두 번째 형태는 C 프로그래머들에게 아주 반가울 것입니다(또한 이 형태가 더 이식성 있습니다).
C 함수 문법과 더욱 비슷하게 왼쪽 중괄호를 다음 줄에 놓아도 됩니다.
function_name ()
{
command...
}
함수는 간단하게 함수 이름을 불러서 실행시킬 수 있습니다.
if [ "$USER" = bozo ]
then
bozo_greet () # if/then 문 중간에 들어간 함수 정의.
{
echo "Hello, Bozo."
}
fi
bozo_greet # bozo 사용자일 때만 동작하고 다른 사용자는 에러가 납니다.
Shift
shift 명령어는 위치 매개변수를 왼쪽으로 한 단계씩 이동시킵니다.
$1 <--- $2, $2 <--- $3, $3 <--- $4, 등등.
원래의 $1 은 없어지지만 $0 은 바뀌지 않습니다. 위치 매개변수가 많이 필요하다면 {중괄호} 표기법으로 가능하지만(예 5-5 참고), shift 를 써서 예전 10개를 쓸 수 있습니다.
#!/bin/bash # 'shift' 로 모든 위치 매개변수를 처리하기.
# 이 스크립트의 이름을 shft 등의 이름으로 바꾸고 #+ ./shft a b c def 23 skidoo #+ 같은 식으로 몇 개의 인자를 넘겨서 불러 보세요.
until [ -z "$1" ] # 모든 매개변수를 다 쓸 때까지... do echo -n "$1 " shift done
echo # 여분의 한 줄.
exit 0 |
'Development > ShellScript' 카테고리의 다른 글
Shift 명령어 (1) | 2012.03.13 |
---|---|
bash 내부 명령어 (0) | 2011.01.09 |
bash 쉘 스크립트 - 위치 매개변수, 조건문 (0) | 2011.01.06 |
bash 쉘 스크립트 - 위치 매개변수 (0) | 2011.01.06 |