2 부  쉘 프로그래밍


1장. 쉘 내장 명령들 

2장. 정규식과 유틸리티들 
3장. 쉘 프로그래밍 문법

 



1장.       쉘 내장 명령들


학습목표 : 쉘 내장 명령들을 이해하고 활용한다 

 


1. 쉘 내장 명령들



(1) export Command

 

Command: export [ name [ =value ] ] ...


Function: 지정된 names을 이후에 실행될 명령어의 환경에 자동적으로 넣기위해 사용한다.


Examples:

 

$ AA=100         // 현재 쉘에서 변수 AA에 100을 할당한다 
$ echo $AA     // 현재 쉘에서 변수 AA의 값을 출력한다 
100 
$ ksh             // 자식 쉘을 생성한다 
$ echo $AA
                    // 변수 AA의 값을 출력한다. 아무값도 출력하지 않는다

$ exit            // 다시 현재 쉘로 돌아 온다 
$ export AA   // AA 변수를 전역 변수로 설정한다 
$ ksh           // 자식 쉘을 생성한다 
$ echo $AA   // 변수 AA의 값을 출력한다 
100              // 변수 AA의 값을 출력한다



(2) readonly Command


Command: readonly [ name [ =value ] ] ...


Function: 지정하는 변수를 읽기 전용 변수로 설정하는 명령이다. 그 변수에 값을 배정하려고 시도한다면 쉘은 에러메세지를 출력한다. readonly변수는 사용자가 변수의 값을 너무 많이 쓰지 않도록 하는데 유용하다. 또한 쉘 프로그램을 사용하는 사람들이 특수변수(예를 들면 HOME 디렉토리나 PATH)의 값을 바꿀수 없도록 하는데도 유용하며 판독 전용의 성질이 서브쉘로 전달된다. 인수가 없는 readonly는 판독 전용 변수들의 리스트를 출력한다.

 

Examples:

 

$ DB=/usr/dgk/database 
$ readonly DB 
$ DB=foo 
DB: is read-only 
$ echo $DB 
/usr/dgk/database 



(3) unset Command

 

Command: unset [ -f ] name ...


Function: 각각 name에 대해서 해당하는 변수 또는 함수를 제거한다. 변수 PATH, PS1, PS2, MAILCHECK, IFS와 같은 환경변수에 대해 unset을 실행할 수 없다. 

Examples:

 

$ a=10 
$ set 
HOME=/home/kys 


TERM=vt100 
PS1=$ 
PS2=> 

a=10 
$ unset a 





(4) set Command

 

command: set -o korn_shell_mode


Function: 사용자 환경을 설정하는 명령이다


Options: korn_shell_mode


allexport        선언되는 모든 변수는 자동적으로 export 된다 
bgnice           우선권이 낮은 상태에서 백그라운드 작업 실행 
errexit            에러가 발생하면 exit가 실행된다 
ignoreoof       쉘을 종료하기 위해 반드시 exit명령을 실행한다 
markdirs         디렉토리명들은 / 로 표시된다 
noclobber       출력방향의 재지정시 기존 파일의 존재 여부를 체크하고난 뒤 실행하도록 지정 
noexec          명령어를 읽어 들이지만 실행 하지는 않는다 
nounset         변수값 치환시에 설정되어 있지 않은 변수는 오류로 취급한다 
trackall           실행하는 명령어들을 alias table에 등록한다 


(5) eval Command

 

Command: eval [ arg ... ]


Function: 쉘이 명령어 라인을 한번 해석한 후 대치와 확장을 끝내고 나서 명령어 라인을 한번 더 해석하도록할 때 사용한다. 

Examples:

 

$ x = 'abc def' 
$ y = '$x' 
$ echo $y 
$x 
$ eval echo $y 
abc def 





(6) exec Command

 

Command: exec [ command ] [ arg ... ]


Function: exec명령을 실행하면, 그 쉘이 지시된 인수들을 가진 지정된 명령을 실행한다. 보통 명령을 실행하면 쉘은 새로운 프로세스번호를 할당받아서 실행하지만 exec는 실행시키는 쉘의 프로세스번호를 지정한 명령에게 넘겨주므로 실행이 종료되면 명령어를 실행시켰던 쉘로 돌아가지 않는다.

 

Examples:

 

$ exec /usr/lbin/ksh         // Replace current process with ksh 

$ exec < datafile              // Reassign stndard input to datafile

$ exec 2> /tmp/errlog      // 표준에러출력전환 : 모든 에러출력은 /tmp/errlog로 
$ exec ls                         // ls를 수행하고 나면 logout 



(7) trap Command

 

Command: trap [ action ] [ condition ... ]


Function: 이 명령은 셀이 signals의 신호 중 하나를 수신할 때마다 명령을 실행하도록 한다. 인수가 없는 trap은 현재 설정되어 있는 trap 의 리스트를 출력한다.

 

$ trap "" signals 
signals에 있는 신호들을 수신하였을 때 그 신호는 무시된다.

 

$ trap signals 
signals에 리스트 된 각 신호들의 처리과정이 디폴트 동작으로 고정된다.

 

Examples:

 

  $ trap   // 모든 trap과 action 을 출력한다


  $ trap '$HOME/.logout' EXIT 
  // 쉘이 EXIT 신호를 수신하여 끝나게 되면 $HOME 디렉토리에

 

  $HOME 있는 .logout을 실행한다.


$ trap "echo hangup >> $ERRFILE; exit " 2 
//  interrupt 신호가 수신되면 hangup를 지정한 파일에 출력하고 현행 프로세스를 종료한다


$ trap "rm $TMPFILE; exit " 1 2 15


$ trap "" 2


$ trap INT QUIT TERM EXIT 
// INT QUIT TERM EXIT 의 trap을 unset한다. 각 신호의 디폴트 action으로 재설정한다


$ trap "echo $count line processed >> $LOGFILE; exit" 1 2 15 
// 1, 2, 15 신호중의 하나를 수신 받았을 때 count값을 $LOGFILE가 지정하는
   파일로 출력

 


 

trap을 위해 사용되는 신호번호 

 신호               내 용  

     HUP    hangup 
     INT    interrupt 
     QUIT   quit 
     ILL    불법 명령어 
     TRAP   추적 트랩 
     IOT    IOT명령 
     EMT    EMT명령 
     FPE    부동소숫점 예외 
     KILL   종료 
10     BUS    버스 에러 
11     SEGV   세그먼테이션 위반 
12     SYS    시스템 호출에 대한 불량 인수 
13     PIPE   기록한것이 없는 파이프상에서 판독 
14     ALRM   경보 클락 
15     TERM   종료(kill)로부터 소프트웨어 종료신호 
16     USR1   사용자 정의 신호1 
17     USR2   사용자 정의 신호2 
18     CLD    서브 쉘삭제

 

 

(8) echo Command

 

Command: echo [ arg ... ]


Function: 나열되는 아규먼트의 값들을 표준 출력으로 출력하는 명령이다. 이스케이프 문자를 사용하여 출력 특수 문자를 지정할 수 있다.

이스케이프 문자:

\a Bell 문자 
\b Backspace 
\c 종료개행 없는 라인 
\f 폼피드(formfeed) 
\n Newline 
\r Return 
\t Tab 
\\ Back-slash 
\nnn ACSII값이 nnn인 문자 
(nnn은 0으로부터 시작하는 0-3자리의 8진수임)

 

Examples:

   $ echo "test escape character \a\a\a\t hear me??\nThanks\n" 
   test escape character hear me? 
   Thanks 
   $

 

 

(9) print Command

 

Command: print [ -options [ n ] ] [ arg ... ]


Function: 아규먼트 리스트를 표준 출력응로 출력하는 명령이다. 

Options
      다음에 오는 모든 옵션들은 무시 
-n     라인의 끝에 개행문자를 두지 않음 
-r     echo의 이스케이프 시퀀스( \ ) 무시 
-R     -n 옵션외에 모든 옵션들을 무시 
-s     기록( history )화일에 args를 저장 
-un   화일 디스크립터 n에 출력 기록(디폴트 1) 
-p     |& 으로 생성된 프로세스에 출력을 기록

 

Ecamples:

 

$ print -r 'hi\\\\there' 
hi\\\\there 

$ print 'hi\\\\there' 
hi\\there 

$ print -s "vi echo.c" 
vi echo.c 



 

(10) read command

 

Command: read -options var1?prompt var2 . . .


Function: 쉘이 표준입력으로 부터 라인을 읽어 들이도록하는 명령이다. 라인에서 계속적으로 공백문자로 구분된 단어들을 변수 vars에 배정하고 라인의 단어보다 변수의 수가 적으면 마지막 변수에 초과한 단어들을 전부 저장한다.

?prompt가 지정되어 있으면 지정한 prompt가 데이타를 읽어 들이기위한 프롬트로 화면이 출력된다. 리스트된 변수명이 없는 경우 읽어들인 데이타는 쉘 내장 변수인 REPLY에 저장된다. 

 

Options:

-r     라인의 연속으로 끝에 붙어있는 \ 을 처리하지 않는다 
-s     기록화일(history)에 입력라인을 기록 
-un    화일디스크립터 n으로부터 데이타를 읽는다(디폴트 0) 
-p     |& 으로 생성된 프로세스 출력으로 읽어들인다.

 

Examples:

 

$ read hours mins 
10 19 
$ echo "$hours:$mins" 
10:19 
$ read file?"Which file: " 
Which file: edit.c 
$ echo $file 
edit.c 

$ read -r raw 
abc\ndef\t 
$ echo $raw 
abc\ndef\t 
$ read 
this is a test 

$ echo $REPLY 
this is a test 
$ cat read1 
while read -r 
do print -r "$REPLY" 
done <<! 
My Home directory is $HOME 





(11) ulimit Command

 

Command: ulimit [ -acdfmst ] [ n ]


Functions: 쉘에서 실행하는 프로세스에 최대 한계를 정하도록 한다.

 

Options
-a      모든 한계를 디스플레이한다. 
-c      코어 덤프를 n blocks으로 제한한다. 
-d      데이타의 크기를 n Kbytes로 제한한다. 
-f       차일드 프로세스에 의해 기록될수 있는 파일의 크기를 n blocks으로 제한한다. 
-m     프로세스나 차일드 프로세스가 사용할수 있는 물리적인 메모리 크기를 n Kbytes로 제한한다. 
-s      스택영역의 크기를 n Kbytes 로 제한한다. 
-t       각 프로세스가 사용할수 있는 시간을 n seconds로 제한한다.

 

Examples:

 

$ ulimit -f 1000 
$ ulimit -f 
1000

 




(12) umask Command

 

Command: umask [ mask ]


Function: 사용자 화일의 생성시 permission mode를 지정한다. 디렉토리 생성시에는 777(rwxrwxrwx) 에 대한 보수값& mask 을, 화일생성시에는 666(rw-rw-rw-)에 대한 보수값& mask을 permission mode 값으로 설정한다. mask값을 설정하지 않으면 현재 설정된 umask값을 출력한다.

 

Examples:

 

$ umask 022 # 디렉토리인 경우 755모드로 생성 , 화일인 경우 644모드로 생성 
$ umask 055 # 디렉토리인 경우 722모드로 생성 . 화일인 경우 622모드로 생성 
$ umask 
0055 
$

 

 



(13) '.' , ':' Command

 

Command: . filename


Function: 지정하는 filename 파일로부터 쉘 스크립트를 읽어서 현행 쉘에서 실행시킨다.

 

Command: :


Function: 필수적인 널 명령이다. : 명령은 명령이 나타내는 요구를 만족시키기 위해 자주 사용된다.

 

Examples:

 

if who | grep dgk > /dev/null 
then 

else 
    echo "dgk's not logged in" 
fi 





(14) let Command

 

Command: let arg ...


Function: let명령은 정수 연산 수식을 평가한다. 수식은 상수, 쉘변수, 그리고 연산자들을 포함할 수 있다. let은 let "expression" 또는 (( expression )) 의 형식으로 사용할 수 있다. 마지막 수식이 0값이 아니면 참, 0값이면 거짓이다. 수식안에 공백이 있으면 인용부호로 묶어서 사용한다. ( )를 이용하여 연산자의 우선 실행에 사용한다.

 

Examples:

 

$ cat let1 
let x=x+1 y=x%4+2 
integer n=${1-20} 
while (( (n=n-1) >= 0 )) && read -r line 
do 
print -r - "$line" 
done


$ cat let2 
let y=22*33 
let "z = y * y / (y -1)" "x = y + 1" 
if let "y % 12" 
then echo "y mod 12 != 0" 
else echo "y mod 12 == 0" 
fi


블로그 이미지

오픈이지

시큐어코딩 교육/컨설팅 전문가 그룹

댓글을 달아 주세요