출처 -  http://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/index.html 

테스트(Test Constructs)

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개를 쓸 수 있습니다.

예 5-7. shift 쓰기

#!/bin/bash

# 'shift' 로 모든 위치 매개변수를 처리하기.

 

# 이 스크립트의 이름을 shft 등의 이름으로 바꾸고

#+ ./shft a b c def 23 skidoo

#+ 같은 식으로 몇 개의 인자를 넘겨서 불러 보세요.

 

until [ -z "$1" ] # 모든 매개변수를 다 쓸 때까지...

do

echo -n "$1 "

shift

done

 

echo # 여분의 한 줄.

 

exit 0

Posted by linuxism

댓글을 달아 주세요