본문 바로가기

쉘프로그래밍

본 쉘(Bourne Shell) 프로그래밍 기초

3. Bourne Shell Programming Lanuguage


Shell은 대화형 명령어 인터프리터(interpreter)이고, 강력한 프로그래밍 언어이다.


3.1. Shell의 선택


(1) 대화형 Shell로 C Shell

-. 입력된 명령을 쉽게 수정 가능

-. 많은 태스크들을 백그라운드로 작업제어 가능


(2) Shell Scripts로 Bourne Shell

-. UNIX 시스템의 최초의 Shell

-. 프로그래밍 언어의 용도로 개발


(3) 용어 정리

-. Shell Scripts : 간단한 Shell Program.

-. Shell Program : 텍스트 파일에 저장된 UNIX 시스템의 명령의 집합.

  

(4) Shell Program Language라 부르는 이유

-. 변수를 가진다.

-. 조건과 반복 구조를 가진다(if-then-else, case, do, while, until)

-. 사용자가 편집할 수 있는 환경을 가진다.



3.2 Shell Program 실행하기


(1) 입력을 재지정(<)하는 방법 

-. 입력 재지정(<)을 사용

-. sh < myfile

-. scripts에 매개변수를 제공할 수 없다.



(2) 매개변수로 scripts을 제공하는 방법

-. sh myfile

-. sh myfile parameters

-. scripts에 매개변수를 제공 가능


(3) 실행 의무를 설정하는 방법

-. 파일 속성을 변경하고, 실행.

$ ls -l myfile

-rw-r--r       1  kc     other          68  1월 9일 11:15 myfile

$ chmod a+x

$ ls -l myfile

-rwxr-xr-x     1  kc    other          68  1월 9일 11:15 myfile

$ myfile

3.3 Shell 변수

(1) Shell 변수

-. 저장된 값이 실행되는 동안 변경될 수 있다.

-. Shell 변수는 변수에게 할당된 값을 저장한다.

-. 변수명과 변수값 사이의 '='에는 공백이 있어서는 안된다.

형식

     variable_name=variable_value

bsh prompt에서 실행해 보면

$ name=gdhong  

    <-- name이라는 변수에 'gdhong'이라는 값을 배정.

$ name = gdhong 

    <-- '='기호 전후에 공백이 있으므로 error message 출력.

  name: 없음        


(2) Shell 변수에 사용되는 $ 기호

-. Shell scripts 내부에서 일반 텍스트 스트링과 구분하여 처리

-. 변수 : $가 붙은 스트링

-. 변수의 값 출력 : echo와 $ 사용

형식

Shell scripts 내부에서 $varable_name

bsh prompt에서 실행해 보면

$ name=gdhong  

$ echo   $name

 


(4) Shell 변수에 사용되는 ' 또는 "기호

-. 변수 내의 공백, 탭, 개행 등을 포함할 때 사용한다.(인용부호)

bsh prompt에서 실행해 보면

$ name="Gildong Hong"

$ echo  $name

 

(5) Null String을 참조해도 아무 상관없음

bsh prompt에서 실행해 보면

$ echo  $she is very beautiful.

$ she=Mary

$ echo  $she is very beautiful.

 


(6) Shell 변수에 사용되는 중괄호({,})

-. Shell scripts 내부에서 변수명 다음에 스트링이 이어질 때 사용한다.

형식

     ${variable_name}string or " $variable_name"string

bsh prompt에서 실행해 보면

$ os=WINDOWS

$ echo   ${os}95

$ echo "  $os"95

 

(7) 읽기 전용 Shell 변수

-. 설정 : readonly

-. 변수 내용변경 불가능

-. 읽기 전용변수로 설정되면 다시는 쓰기 가능으로 바꿀 수 없다.

형식

readonly variable_name    <-- 읽기 전용 설정

readonly                 <-- 지정된 읽기 전용 변수의 출력

Bsh prompt에서 실행해 보면

$ readonly name           <-- 읽기 전용의 설정

$ name=KIM

$ readonly

 


(8) Shell 변수 export

-. 사용자가 지정한 변수는 현재의 Shell에서만 사용 가능하다.

-. export로 표시된 변수는 Shell이 생성한 어떤 명령에도 사용할 수 있다.

형식

$ export variable_name        <-- export로 표시

$ export                      <-- export 변수 출력

bsh prompt에서 실행해 보면

$ cat > example               <-- example file의 생성

  echo    $he likes Mary.

  Ctrl+d

$ he=John

$ chmod a+xexample

$ example

$ export he

$ example

 


(9) Shell 변수를 대화형으로 사용하기

-. Shell 변수는 대화형 명령 중 긴 텍스트 스트링을 저장하는데 유용하게 사용가능

-. 자주 사용되는 긴 경로명이나 파일명을 Shell 변수로 지정해 두면 편리

예제1. Shell 변수를 사용하지 않는 경우

$ cd /home1/lab/dblab/gwjang/unix

$ ls

$ ls /home1/lab/dblab/gwjang/unix

     

예제2. Shell 변수를 사용하는 경우

$ unix=/home1/lab/dblab/gwjang/unix

$ cd    $unix

$ ls

$ ls $unix

     


(10) 자동 Shell 변수

변수

설 명

$?

마지막 실행된 명령이 돌려주는 최종값을 포함한다.

$$

Shell의 프로세스 ID를 포함한다.

$!

Shell이 시킨 마지막 백그라운드 프로세스의 번호를 포함한다.

$-

Shell이 기동될 때 Shell에 전달된 플래그 또는 set 명령을 사용해 지정된 플래그를 포함한다.

$#

Shell의 매개변수의 수를 포함한다.(Shell 프로그램의 매개변수-링크)

$*

현재 매개변수 리스트를 포함한다. $* = $1, $2, ... 등과 같고 " $*" = " $1, $2, ..."와 같다.

$@

현재 매개변수 리스트를 포함한다. 인용부호없이 $@를 쓰면 공백을 포함하고 있는 배개 변수를 별개의 매개변수로 분리한다. $@= $1, $2, ... 등과 같고 " $@"= " $1", " $2", ... 등과 같다.


(11) 표준 Shell 변수

-. 사용자는 set 명령을 사용해 모든 현재 변수의 전체 리스트를 볼수 있다.

-. Shell 프로그램의 매개 변수-링크

-. 중요한 표준 변수 리스트

변수

설  명

$HOME

. 사용자의 홈 디렉토리명을 포함한다.

. 로그인시 지정되며, UNIX 파일 시스템 내에 저장된 파일을 액세스할 필요가 있는 프로그램에 의해 사용된다.

. .profile, .login, .cshrc, 등에서 사용

$LOGNAME

. 사용자의 로그인 명이다.($USER)

$MAIL

or

$MAILPATH

. 메일 도착을 알고자 할 때 사용된다.

. 둘 중 하나만 지정되야 한다.

. $MAIL이 지정되면, 메일이 도착할 파일명이 지정되어야 한다.

. $MAILPATH가 지정되면, 콜론(:)으로 분리된 메일 파일의 리스트이어야 한다.

. 이들 변수는 메일 프로그램이 E-Mail을 어디에 놓아야 하는지를 지정하지는 않지만, 새로운 메일이 도착하면 Shell이 어디를 찾아야 하는지를 지정한다.

$MAILCHECK

. 메일 파일을 검사하는 초 단위의 간격

$SHELL

. 로그인 Shell명이다.

. vi 텍스트 에디터와 같이 프로그램을 빠져나가지 않고도 또 다른 대화형 Shell을 부르기를 원하는 프로그램에서 사용된다.

$PS1

. Shell이 사용할 첫 번째 프롬프트 스트링이다. 디폴트는 $이다.

$PS2

. 두 번째 프롬프트 스트링이다.

. 명령이 완전히 끝나지 않고 Shell이 또 다른 입력 행을 요구할 때 사용된다.

. 디폴트는 >이다.

$TERM

. 사용자의 터미널 형을 포함한다. vi 같은 어떤 명령은 정확한 결과를 내기 위해 사용중인 터미널의 종류가 무엇인지를 알 필요가 있다.


(12) 검색 경로

-. Shell이 사용자의 명령을 어디에서찾아야 하는가에 관한 디렉토리 리스트

-. 대부분의 검색 경 로는 사용자의 홈 디렉토리, /bin, /usr/bin을 포함

   이유 : 실행 명령어들을 bin이라 는 디렉토리 밑에 저장하고 있기 때문에

-. 검색 경로는 검색할 추가 디렉토리를 설정

-. 만약 검색 경로 내의 디렉토리에서 명령(파일)이 발견되지 않으면 Shell은 프로그램이 없다는 에러 메시지를 출력

-. 현재 Shell의 검색 경로의 설정은 .profile(Bourne Shell), .cshrc(C Shell)에서 지정

-. 검색 경로에서 콜론(:)은 널(null) 디렉토리(현재의 디렉토리)

-. echo 명령으로 현재 검색 경로를 출력

검색 경로의 출력

$ echo   $PATH

  :/usr/bin:/usr

     


(13)  비지정 변수

-. Shell에서는 지정되지 않은 변수도 사용할 수 있다.

-. set명령의 -u 옵션을 지정하면 비지정 변수의 사용을 막을 수 있다.

-. 비지정 변수를 사용할 수 있는 방법

변수

설 명

${varable:-word}

. variable이 지정되고 널이 아니면 그 값을 사용한다.

. 그렇지 않으면 word의 값이 사용되고 variable은 변하지 않는다.

${varable:=word}

. variable이 지정되고 널이 아니면 그 값을 사용한다.

. 그렇지 않으면 word의 값이 variable에 배정되고, 이 새로운 값이 사용된다.

${varable:?word}

. variable이 지정되고 널이 아니면 그 값을 사용한다.

. 그렇지 않으면 에러 메세지인 word를 출력하고, Shell scripts를 종료한다.

. word가 생략되면, shell scripts를 종료하기 전에 "parameter null or not set"이라는메세지를 출력한다.

${var:+word}

. variablerk 지정되고 널이 아니면 word로 대치한다. 그렇지 않으면 아무것도 대치하지 않는다.


비지정 변수 사용 예제 1

        $ echo    $she likes Jon.

     

        $ echo  ${she:-Mary} likes John.

     

        $ echo   $she likes John.

     

        $ echo   ${she:?Error} likes John.

     

        $ echo   ${she:+Jane} likes John.

     

        $ echo   ${she:=Sue} likes John.

     

        $ echo   $she likes John.

     

        $ echo   ${she:?Error} likes John.

         

   

비지정 변수 사용 예제 2

        $ echo    $fruit apple

        $ set -u

        $ echo   $fruit apple

         

   

       

3.4 특수 문자의 인용


(1) UNIX Shell에서 특수 문자를 인용하는 방법이다.


(2) 백슬래쉬(\)  :  백슬래쉬 뒤에 오는 문자를 인용


(3) 단일 인용부호(',')

-. 단일 인용부호로 묶은 문자를 인용.

-. 어떤 해석도 발생하자 않는다.


(3) 이중 인용부호(",")

-. 이중 인용부호로 묶은 문자는 \, ", ", $를 제외하고 인용.

-. 명령과 파라미터 변수 대치가 이중 인 용부호 안에서 발생

       

bsh prompt에서 실행해 보면

        $ echo   $HOME

        $ echo \$HOME       

        $ echo '$HOME'

        $ echo " $HOME"

 

   

그렇다면 다음 세 개의 명령의 차이는 무엇일까?

        $ name='Gildong Hong'

        $ name="Gildong Hong"

        $ name=Gildong\ Hong

   


3.5 명령 종결 상태


(1) UNIX 시스템은 프로그램이 성공적으로 실행되면, 0(zero)을 리턴(return)한다.

   에러의 경우는 1 또는 2를 리턴한다.

Name     

I/O       

File Descriptor

stdin      

input     

0

stdout     

output    

1

stderr      

error output

2

user-defined

input/output

3-19


(2) 예제

     

        $ pwd

        $ echo   $?

        $ ls /test

        $ echo  $?

        $ echo  $?

 

   

3.6 단순 조건문

(1) && 연산자

: 첫 번째 명령이 성공적(리턴 0)으로 수행될 때에만 실행




(2) || 연산자

: 첫 번째 명령이 실행 실패(0이외의 종결 상태)일 때에만 실행


(3) true / false

-. ture = 0의 종결 상태를 리턴

-. false = 0 이외의 종결 상태를 리턴

-. true와 false는 if, while과 같은 조건문에서 자주 사용된다.


       

예제

        $ ls -l >/dev/null && echo Sucess!

           Sucess!

        $ ls -l testtest  || echo Failed...

     

        $ true && echo TRUE

       

        $ false || echo FALSE           

 

   


3.7 단순 명령, 파이프라인, 리스트


(1) 리스트의 요소를 분리하는 분리자

분리자

설    명

;

순차실행

파이프 라인 실행

&

백그라운드 실행

&&

조건실행(true)

|| 

조건실행(false)


(2) IF 조건문

형식1

     if [ conditons ]

     then

       command_list

     else

       command_list

     fi

   

형식2

     if [ conditons ]

     then

       command_list

     fi

   

형식3

     if [ conditons ]

     then

       command_list

     elif [ conditons ]

     then

       command_list

     else

       command_list

     fi

   



(3) IF 조건문 예제

: 파일이 존재하면 내용을 보여주고, 그렇지 않으면 파일을 생성한다.

Shell Program 예제

     if [ -r filename ]

     then

       cat filename

     else

       echo "Enter the data for filename"

       cat > filename

     fi

   


3.8 Shell 프로그램 매개변수


(1) $1은 명령행의 첫 번째 매개변수, $2은 명령행의 두 번째 매개변수, ...를 나타낸다.


(2) $0는 현재 실행중인 Shell 프로그램을 나타낸다.


(3) 다음은 Shell 매개변수를 나타내는 표이다.

Bourne Shell

C Shell

설명

$#

$#

매개변수의 수

$0

$0

명령어 이름

$1, $2, ...

$1, $2, ...

매개변수

 

$argv[n]

매개변수 $1, ...

$*

$*, $argv[*]

$1, $2, ...

$@

 

$1, $2, ...

$-

 

set 명령의 Shell options

$?

 

마지막 명령의 리턴 값

$$

$$

현재 명령의 프로세스 번호

$!

 

마지막 백그라운드 명령의 프로세스 번호


(4) 예제

: 네 개의 매개 변수를 입력 받아서 출력하는 예

Shell Program 예제

if [  $# -eq 4 ]

then

    echo "command is  $0 and arguments are  $1, $2,  $3, $4."

else

    echo Syntax Error:  $0 arg1 arg2 arg3 arg4

fi

   


3.9 While과 Until 조건 루프


(1) while 문

형식

while [ condition ]

do

       actions

done

   


(2) until 문

형식

Until [ end_condition ]

do

       actions

done

   


3.10 For 문

형식

for variable_name in value1 value2 . . .

do

       action on   $variable_name

done

   



3.11 Case 문

형식

case $variable_name in

value1)

       action1  ;;

value2)

       action2  ;;

value3|value4)

       acton3  ;;

       . . .

*)

       default action  ;;

esac

   

(1) "*)"은 default action을 의미한다. match되는 것이 없으면 default action을 수행한다.


(2) "|" 은 or를 타나낸다.


(3) ?는 한 문자와 대치될 수 있으며, 대괄호는 문자의 클래스를 정의한다.



3.12 Break와 Continue


(1) break는 while, for, until 등의 loop문에서 loop를 벗어날 수 있도록 해 준다.


(2) continue는 loop를 계속 수행할 수 있도록 해준다. 즉 loop내의 다음 반복을 수행한다.



3.13 명령 대치


(1) 명령 대치는 명령어의 실행 결과를 변수의 값으로 지정되는 경우이다.

    이것은 명령어가 역인용기 호(` : backquote)로 둘러 싸인다.

(2) 명령 대치는 Shell 변수에 대한 산술 연산을 수행하는데 자주 사용한다.

예제

  $ today=`date`

  $ echo  $today

 

   


3.14 Shell 대치


(1) 명령어 대치 : `command`


(2)  변수 대치 : $variable_name


3.15 Here Documents

: Here documents는 Shell 프로그램 내에서 표준 입력을 일시적으로 재지정에 사용.

형식

command args <&ltsymbol

. . . documents . . .

symbol

      << 이후의 symbol은 here document의 끝을 나타낸다.

   



3.16 Shell 함수


(1) Bourne Shell의 약점 중의 하나는 함수가 부족하다는 것


(2) 형식

Shell 함수의 구문

function_name()

{

       statements

}

   

(3) Shell 함수는 Shell scripts의 맨 위에 정의되어야 한다.



3.17 Set - 변수출력과 Shell 운영 모드 지정

(1) set

-. Shell 내부 옵션의 지정을 제어

-. 값을 Shell의 위치 파라미터로 이동하는 역할

(2) set의 옵션

option

설   명

-e

명령이 실패하면 즉시 탈출한다.

-f

파일명 생성을 못하게 한다.

-n

명령을 실행하지 않고 읽는다. 이것은 실제 실행시키지는 않고 Shell 대본의 구문을 테스트하고자 할 때 유용하다. Shell scripts 디버깅 때 자주 사용

-i

대화형 쉘을 실행한다. terminate 신호는 무시된다. interrupt 신호는 받아들였다가 무시되는데, 인터럽트가 되도록 기다리게 한다.

-t

한 명령을 실행한 후 탈출한다.

-u

비지정 변수에 대한 참조를 에러로 한다.

-v

vervose 모드를 설정한다. Shell scripts 디버깅 때 자주 사용

-x

실행될 때 +가 앞에 있는 각 명령을 출력한다. Shell scripts 디버깅 때 자주 사용

-

 -v와 -x 디버깅 플래그를 해제한다.

--

플래그 옵션 중의 어느 것도 변경되지 않는다.




3.18 Test([,]) - 조건 평가


(1) 주어진 이름이 파일이나 디렉토리이면,

읽을 수 있는지(readable), 쓸 수 있는지(writable), 실행할 수 있는지(executable) 여부결정


(2) 두 스트링 혹은 수치(integer)

큰지(greater than), 보다 작은지(less than), 같은지(equal)를 결정


(3) AND, OR, NOT logic 연산을 허락


(4) 파일 액세스 테스트를 위한 option

option

설 명

-b file

file이 블록 특수 파일이면 리턴 True(0)

-c file

file이 문자 특수 파일이면 리턴 True(0)

-d file

file이 디렉토리 파일이면 리턴 True(0)

-f file

file이 보통 특수 파일이면 리턴 True(0)

-g file

file이 set-group-ID 권한을 가지면 리턴 True(0)

-h file

file이 기호 링크이면 리턴 True(0)

-k file

file이 스티키(sticky) 비트 지정을 가지면 리턴 True(0)

-L file

file이 기호 링크이면 리턴 True(0)

-p file

file이 이름있는 파이프이면 리턴 True(0)

-r file

file이 읽기 가능이면 리턴 True(0)

-s file

file이 1byte 이상의 길이이면 리턴 True(0)

-t [n]

파일 기술자 n(n이 제공되지 않으면 1로 간주)이 터미널을 참조하면 리턴 True(0)

-u file

file이 set-user-ID 권한을 가지면 리턴 True(0)

-w file

file이 쓰기 가능이면 리턴 True(0)

-x file

file이 실행 가능이면 리턴 True(0)


(5) 스트링 비교를 위한 option

optoin

설 명

-n s1

스트링 s1이 길이가 0 이상이면 리턴 True(0)

s1

스트링 s1이 널이 아니면 리턴 True(0)

-z s1

스트링 s1의 길이가 0 이면 리턴 True(0)

s1 = s2

두 개의 스트링이 같으면 리턴 True(0)

s1 != s2

두 개의 스트링이 같지 않으면 리턴 True(0)



(6) 수치 비교를 위한 option

option

설 명

-eg

같음

-gt

보다 큼

-ge

크거나 같음

-ng

같지 않음

-lt

보다 작음

-le

작거나 같음


(7) 논리 연산을 위한 option

option

설 명

!

NOT

-a

AND

-o

OR



3.19 Expr - 표현식 평가


(1) expr 명령은 범용의 정수 산술 프로그램이다.

   expr은 그 결과가 0이 아니면 참이고, 그 이외에는 거짓을 리턴한다.


(2) expr 연산자

형 식

설 명

expr \| expr

왼쪽 표현식이 널이 아니고 0이 아니면 왼쪽 표현식을 돌려주고, 그렇 지 않으면 오른쪽 표현식을 돌려준다.

expr \& expr

양쪽 모두의 표현식이 널이 아니고 0이 아니면 왼쪽 표현식을 돌려주 고, 그렇지 않으면 0을 돌려준다.

expr cmp-op expr

비교가 참이면 1을 돌려주고, 그렇지 않으면 0을 돌려주다.

양쪽 표현식이 모두 수치 비교이고, 그렇지 않으면 텍스트 비교이다.

\>     =     \>=      \<     !=      \<=

expr add-op expr

두 개의 표현식을 더하거나 뺀다.

+    -

형 식

설 명

expr mul-op expr

곱하고 나누거나 나머지를 계산한다.

\*      /      %

expr : regexp

고정 스트링인 expr과 다음 만능문자를 포함할 수 있는 정규식인 regexp를 비교한다.

.

어떤 한 문자와도 부합한다.

$

검색을 스트링의 끝에 한정한다.

[list]

리스트 내의 어떤 한 문자와도 부합한다.

*

선행하는 한 문자 정규식의 0 이상의 것과 부합한다.

\(\)

부합의 괄호 부분을 돌려준다. 이 옵션이 없으면, 결과는 부합 하는 길이이거나 부합되는 것이 없다는 의미의 0 중의 하나이다.


(3) 예제

$ tty

$  expr `tty` : ".*\(.\)\$"

 



3.20 Ulimit - 자원 제한의 지정과 출력


(1) ulimit 명령은 여러 자원의 제한을 지정한다.


(2) Ulimit의 옵션

option

설    명

-a

제한 리스트 보기

-H

강한 제한 지정

-S

약한 제한 지정(default)

-c

512byte 블록 단위의 최대 코어 덤프 파일 크기

-d

Kbyte 단위의 최대 데이타 세그먼트 크기

-f

Kbyte 단위의 최대 파일 생성 크기

-n

파일 지시자의 최대 수

-s

Kbyte 단위의 최대 스택 세그먼트 크기

-t

초 단위의 최대 CPU 시간

-v

Kbyte 단위의 최대 가상 기억장치 크기


(3) 예제

$ ulimit -a

 


3.21 getopts - scripts에서의 옵션 관리


(1) getopts 명령은 옵션 플래그에 대해 System V 표준을 따르는 Shell 대본을 만든다.


(2) getopts 명령 은 두 개의 매개변수를 요구한다.


(3) 옵션 플래그의 리스트와 현재의 옵션 플래그가 저장될 변수이다.



3.22 Bourne Shell의 내장 명령


(1) Bourne Shell의 내장 명령

명 령

설 명

:

 아무 일도 하지 않는다.

.file

file에서 현재 Shell로 명령을 읽어들인다. ..profile을 입력하면 .profile이 실행된다.

break[n]

루프를 벗어난다. n이 지정되면 n레벨에서 벗어난다.

continue [n]

루프를 계속한다. n이 지정되면 n번째 외부 루프를 계속한다.

cd [dir]

홈 디렉토리로 이동하거나, 지정된 dir로 이동한다.

echo [arg...]

매개변수를 출력한다.

eval cmd...

cmd 내의 매개변수를 재평가한다. 이것은 Shell에게 강제로 다른 대치를 취해 매개변수 리스트로 전달한다.

exec cmd...

현재 실행중인 Shell의 위치에서 cmd를 실행한다. 이것은 현재 Shell을 새로운 프로세스로 대치하도록 하는 것으로, 사용자가 다른 Shell 또는 사용자 인터페이스로 전환할 수 있도록 한다.

export [var...]

n이 지정되면 n 종결 상태로 벗어난다.

export [var...]

매개변수가 없으면 새로운 환경 변수를 출력하고, 매개변수가 있으면 그들 변수는 export되는 것임을 나타낸다.

newgrp [arg]

exec newgrp arg와 동일하나, newgrp를 실행시켜 사용자를 새로운 Shell의 실행으로 생긴 새로운 그룹에 등록한다.

pwd

현재 디렉토리명을 출력한다.

read var ...

표준 입력에서 한 행을 읽는다.

readonly [var...]

읽기 전용 변수의 설정 및 리스트를 출력한다.

return [n]

종결 상태를 n으로 돌려주면서 함수에서 벗어난다.

set [-op][arg...]

Shell 옵션을 지정한다.

shift [n]

매개변수를 한 위치 또는 n위치 아래로 이동시킨다.

test args ...

표현식을 테스트한다.

time

실행 시간을 출력한다.

trap [cmd][n]...

신호 n이 도착하면 cmd를 실행한다. cmd 텍스트는 두 번 조사된다. 가장 좋은 신호 처리기는 Shell 함수이다. cmd가 없으면, 신호 n은 디폴트로 재지정된다. cmd가 널이면 신호 n은 무시된다. n이 0이면 scripts에서 벗어난 곳에서 cmd가 실행된다.

type [name ...]

name이 어떻게 명령으로서 사용되는가를 출력한다. type ls는 ls is /usr/ls를 출력한다.

ulimit args

자원 제한을 지정한다.

umask [nnn]

생성 비트 마스크를 지정하고 출력한다. umask 022는 생성되는 파일과 디렉토리에 대하여 그룹과 다른 사람에게 쓰기를 허용하지 않는다.

unset [name ...]

지정된 변수 또는 함수의 지정을 해제한다.

wait [n]

PID가 n인 백그라운드 프로세스가 끝날 때까지 기다리거나 모든 백그라운드 프로세스가 끝날 때까지 기다린다.



3.22 언제 Shell programming을 사용하는가?


(1) 실행 시간이 많이 소요된다.


(2) 이미 UNIX 시스템 도구로 작성되어 있는 기능을 사용해 문제를 해결할 때


(3) 기본 데이타 항목이 텍스트나 파일의 행일 경우


(4) 많은 파일을 위해서 어떤 것을 하고자할 때


(5) 같은 작업을 반복 수행하고자 할 때

- 문서의 그룹내에서 날짜나 이름을 바꾼다

- 보고서를 매달 만든다.

- 상태를 매일 입력하고 매달 보고한다.



3.23 언제 Shell programming을 사용하지 말아야 하는가?


(1) 아주 복잡한 작업인 경우


(2) 처리 속도 및 효율이 높은 것을 요구하는 경우


(3) 다른 H/W 환경인 경우


(4) 다른 소프트웨어 툴들을 사용할 경우