Download presentation
Presentation is loading. Please wait.
1
5. Korn 셀
2
5.1 소개 David Korn 에 의해 작성된 것 Bourne 셸을 포함하는 것으로 작업 제어 , 명령줄 편집, 프로그래밍 특성을 개선한 것 5. Korn 셀
3
5.1 소개 Shell의 공통적인 기능 이외에 Korn Shell에 추가된 기능들 별명을 사용한 주문화된 고유명령어
히스토리 메카니즘을 통한 이전 명령어로의 접근 함수 개선된 작업 제어 여러 개의 새로운 내장 명령어와 기존 명령어의 개선 5. Korn 셀
4
5.1 소개 Korn 셸 기능 내장 명령어 편집기 프로그래밍 언어 변수 시작하기 히스토리 별명 작업제어 select
Functions print let typeset .profile fc jobs bg fg ^Z 5. Korn 셀
5
5.2 시작하기 /bin/ksh ksh 명령어 : 스크립트나 터미널로부터 수동적 호출 가능. 시작순서
① “/etc/profile” ② $HOME/.profile ③ $ENV/.kshrc $ : Korn 셸 프롬프트 , 지역변수 $PS1를 설정하여 변화 가능 ( 참고 : Bourne 셸 $ , C 셸 %) 시작 파일 실행 ksh $ . .profile csh % source .cshrc 5. Korn 셀
6
5.3 별명(Aliases) 자신만의 고유 명령어를 만들어 사용한다 alias [-tx] word [ = string] ]
(예) $ alias dir=‘ls -af’ $ dir ”ls -aF” 와 동일 . / / mjkim.c chej.c $ dir *.c ”ls -aF *.c” 와 동일 mjkim.c chej.c 5. Korn 셀
7
5.3 별명(Aliases) 내장 명령어의 별명 별명제거
case, do, done, elif, esac, fi, for, function, if, select, then, time, until, while, {, } 을 제외한 모든 내장 명령어들은 별명이 될 수 있다. 별명제거 unalias {word}+ 5. Korn 셀
8
5.3 별명(Aliases) 미리 정의된 별명 별 명 값 별 명 값 유용한 별명
별 명 값 별 명 값 false let r fc -e - function typeset -’ true | history fc -l type whence -v integer typeset -I hash alias -t 유용한 별명 rm = ‘ rm -i ’ mv = ‘ mv -i ’ ls = ‘ la -aF ’ env = ‘ printenv | sort ’ 5. Korn 셀
9
5.3 별명(Aliases) 추적된 별명 추적된 별명 기능을 사용하여 자동적으로 절대 경로 이름을 치환하도록 조절할 수 있음.
Continue... 5.3 별명(Aliases) 추적된 별명 추적된 별명 기능을 사용하여 자동적으로 절대 경로 이름을 치환하도록 조절할 수 있음. 별명의 값은 $PATH값에 의존함 $PATH 변수 변환시 값 다시 계산됨. 미설정시는 모든 추적된 별명값은 null로 설정됨 -t 옵션으로 나열된 모든 별명들은 추적된 별명으로 표시되고, 표준 탐색 메카니즘이 그들의 초기값을 설정하는데 사용됨 -t 옵션 다음에 별명이 제공되지 않으면 현재까지 추적된 별명들의 리스트가 보여짐 5. Korn 셀
10
5.3 별명(Aliases) (예) $ alias -t page ... 페이지에 대해 추적된 별명 정의
page=/usr/ucb/page 절대 경로 이름 저장 $ set -o trackall … 모든 명령어들을 자동으로 추적 $ date … date 실행 Thu Feb :54:44 CST 1992 $ alias -t … 모든 추적된 별명 보기 date-/bin/date …date를 추적 page=/usr/ucb/page 5. Korn 셀
11
5.3 별명(Aliases) 별명의 공유 자식 셀에서 별명을 사용하기 위해서는 -x 옵션을 사용하여 별명을 export alias로 표시해야 함 -x 옵션을 갖는 모든 별명들은 범위 전환된 별명으로 표시됨 -x 옵션뒤에 별명이 없으면 현재까지 범위 전환된 별명들의 목록이 표시됨 별명 값 자식 셸에서 변환되어도 부모 셸의 원래 별명 값에는 영향이 없음 5. Korn 셀
12
5.4 히스토리 히스토리 메카니즘 번호가 붙여진 명령
: 키보드로부터 입력받은 명령어의 기록을 보존하여, 다음 단계에서 편집하거나 다시 실행할 수 있게 함 번호가 붙여진 명령 프롬프트 $PS1 에 ! 문자를 포함하도록 설정하기 히스토리를 사용할 때, 프롬프트에 입력하려는 명령어의 “번호”를 포함시켜 정렬해줌. (예) $ PS1=‘ ! $ ’ ps1이 !를 포함하도록 설정 20 $_ 명령어 #20 을 위한 프롬프트 5. Korn 셀
13
5.4 히스토리 명령어의 저장 마지막 $HISTSIZE명령어를 화일 $HISTFILE에 기록함
$HISTFILE 이 설정되어 있지 않거나 명명된 화일을 쓸 수 없으면, 화일 $HOME/.sh_history가 디폴트로 사용 (예) $ echo $HISTSIZE … ”.profile”에 있는 HISTSIZE를 100으로 설정 $ echo $HISTFILE HISTFILE은 설정 안됨 $ HISTFILE=HH ksh …$HISTFILE에 명령 기록 5. Korn 셀
14
5.4 히스토리 fc (fix command)를 이용하는 명령어 재실행 fc -e - [old=new] prefix (예)
31 $ fc -e - ech “ech” 접두어를 갖는 마지막 명령어 실행 (또는 $ fc -e vi ech) echo $HISTFILE 32 $ fc -e - FILE=SIZE ech ”FILE”을 “SIZE”로 대체 100 5. Korn 셀
15
5.4 히스토리 명령어 편집 fc [ -e editor] [ -nlr] [ start ] [end]
명령어들이 재실행되기 전에 미리 편집. 명시된 명령어의 범위에 editor라 불리우는 편집기를 불러들임. 지정되지 않으면 환경변수 $FCEDIT에 저장된 경로 이름의 편집기가 사용. 특정 명령어를 인덱스나 접두어로 지정하기 위해 start 의 값만 숫자나 접두어로 제공 start와 end는 명령의 범위를 명시 -n : 명령어 번호의 생성을 금지시킴 -l : 선택된 명령어들을 실행하지 않고 보여주기만 한다. -r : 선택된 명령어들을 역순으로 나열 5. Korn 셀
16
5.5 명령어 편집 korn 에서 명령어를 편집하는데 사용될 수 있는 편집기 vi, gmacs, emacs 편집기 선택을 위해 $VISUAL이나 $EDITOR 변수를 이들 중 하나의 이름으로 끝나는 문자열을 설정 (예) 40 $ VISUAL=vi 내장 “vi” 편집기 선택 내장 vi 편집기 Vi 편집 후 빠져 나오면 편집되었던 명령들이 차례대로 실행됨 5. Korn 셀
17
Continue... 5.6 산술 계산 let expression 배정도 정수 산술 계산을 수행, 할당 연산자를 제외하고, 왼쪽에서 오른쪽으로 결합됨. 오버플로우를 검사하지 않음 base#number형식(base: 2~36)을 사용하여 디폴트로 base가 10인 상수를 명시적으로 수정할 수 있음 연산자나 피연산자 사이에 공백이나 탭을 넣어서는 안됨 식의 일부로 사용되는 변수 앞에는 $를 붙이지 않음 5. Korn 셀
18
5.6 산술 계산 (예) $ let x = 2 + 2 … 표현식은 공란 포함
$ ksh : =: syntax error … 공란 또는 탭은 허용 안됨 $ let x= … OK $ echo $x 4 $ let y=x* … 변수 앞에 $금지 $ echo $y 16 $ let x=2#100+2# 진수 더하기 수는 10진수로 표시됨 5. Korn 셀
19
5.6 산술 계산 메타문자 해석 방지 <, >, * 와 같은 표준 연산자를 메타 문자로 해석하므로 \을 앞에 쓰거나 따옴표로 구별해야 한다. (( list ))는 let “ list ” 와 동등하다. 토큰 주위에 공란을 사용하도록 허용한다. 이중따옴표는 변수의 확장을 막지 않음 반환값 식이 0(참)으로 계산되면 반환 코드는 1, 그렇지 않으면 0 간단한 산술 계산에는 test 대신 ((..))를 사용하는 것이 좋다. 5. Korn 셀
20
Continue... 5.7 틸더 치환 ~name name이 유효한 사용자 이름인지를 보기 위해 패스워드 화일 “/etx/passwd”를 검사함. 만일 유효하면 ~name을 사용자의 홈 디렉토리의 절대 경로 이름으로 치환하고 유효하지 않으면 바뀌지 않고 남아 있는다. 틸더열 다음으로 치환 ~ $HOME ~user user의 홈 디렉토리 ~/pathname $HOME/pathname ~ $PWD(현재 작업 디렉토리) ~ $OLDPWD(이전 작업 디렉토리) 5. Korn 셀
21
5.7 틸더 치환 (예) $ pwd /usr/glass ….현재 작업 디렉토리 $ echo ~
$ cd / ….루트 디렉토리로 변경 $ echo ~+ / ….현재 작업 디렉토리 $ echo ~- / usr/glass ….이전 작업 디렉토리 $ echo ~docx /usr/docx ….다른 사용자의 홈 디렉토리 5. Korn 셀
22
5.8 메뉴(select) in절에 의해 명시된 단어들의 번호가 붙여진 목록을 표준 에러 채널
Continue... 5.8 메뉴(select) in절에 의해 명시된 단어들의 번호가 붙여진 목록을 표준 에러 채널 에 표시하고 특수 변수 $PS3에 저장된 프롬프트를 보인 후 사용자 의 입력을 기다림 사용자가 한 줄을 입력하면 $REPLY에 저장 사용자가 나열된 숫자 중 하나를 입력하면 name은 그 숫자로 설정되고 리스트 명령들이 실행 됨 사용자가 공백을 입력하면 선택목록이 다시 보여짐. 부적절한 선 택을 입력하면 name은 null로 설정되고 리스트 명령들이 실행 됨 select name [ in {word}+ ] do list done 5. Korn 셀
23
5.8 메뉴(select) (예) echo menu test program
select $reply in “date” “exit” do case $reply in "date") date # display date. ;; “exit”) # exit break esac done 5. Korn 셀
24
5.9 함수 function name { list of commands } name ( ) Continue...
5. Korn 셀
25
5.9 함수 (예) $ cat func1.ksh message ( ) { echo hello } I = 1
while (( I <= 2 )) do message let I=I+1 done $ func1.ksh hello 5. Korn 셀
26
5.9 함수 매개변수 사용 (예) $ cat func2.ksh f ( )
{ echo parameter 1 = $ #display first parameter echo parameter list = $* #display entire parameter list } f cat dog goat $ func2.ksh parameter 1 = cat parameter list = cat dog goat 5. Korn 셀
27
5.9 함수 함수로부터 복귀 return [ value ]
Continue... 5.9 함수 함수로부터 복귀 return [ value ] 실행된 마지막 명령어의 종료 코드와 함께 반환되거나 value로 설정된 종료 코드를 돌려 준다. 주 스크립트로부터 실행되면, exit명령과 동일하다. 종료 코드는 $? (마지막 명령의 반화 값) 변수를 통해 호출자가 접근할 수 있다. 5. Korn 셀
28
5.9 함수 (예) $ cat func3.ksh f ( ) { (( returnValue = $1 * $2 ))
return $returnValue } # main program f # call function result=$? # save exit code Echo return value from function was $result $ func2.ksh return value from function was 12 5. Korn 셀
29
5.9 함수 문맥 지역 변수 (local variable)
함수는 그것을 호출하는 프로세서와 동일한 문맥에서 실행함. ( 변수와 현재 작업 디렉토리와 트랩을 공유함 을 의미 ) 단, “ trap on exit”는 함수가 반환될 때 실행되는 유일한 예외이다. 지역 변수 (local variable) typeset 함수를 사용하여 생성한 변수는 생성된 함수와 함수 호출을 정의하는 모든 함수들로 유효 범위가 (local로) 제한 된다. 5. Korn 셀
30
5.9 함수 재귀 함수 공유 여러 개의 스크립트가 어떤 함수의 소스 코드를 공유하
기 위해, 소스 코드를 분리된 화일에 놓고 그 함수를 사 용하는 스크립트의 시작부 에 “.” 내장 명령어를 사용하 여 소스 코드를 읽는다. 5. Korn 셀
31
5.10 개선된 작업 제어 jobs [-l] 모든 셀작업의 목록을 화면에 표시
-l 옵션을 사용할 때, 프로세서 id가 리스트에 추가됨 (예) $ jobs … 현재는 job이 없음 $ sleep 1000 & … 후면 작업 시작 [1] $ man ls | ul -tdumb > ls.txt & … 또 다른 후면 작업 시작 [2] $ jobs -l …현재 작업들 표시 [2] Running $ man ls | ul -tdumb > ls.txt & [1] Running sleep 1000 & 5. Korn 셀
32
5.10 개선된 작업 제어 job# [ +/- ] PID status Command +는 후면에 위치한 마지막 작업 의미
-는 마지막에서 두번째 작업 의미 status는 다음중의 하나이다. Running (수행중) Stopped (일시 중단) terminated (시그널에 의해 사멸됨) Done (종료 코드는 0) Exit ( 종료 코드는 0이 아닌 값) 5. Korn 셀
33
5.10 개선된 작업 제어 작업 명시 형식 명시 %integer 작업 번호 integer
형식 명시 %integer 작업 번호 integer %prefix prefix로 이름이 시작하는 작업 %+ 마지막으로 참조된 작업 %% %+와 동일 %- 마지막에서 두번째로 참조된 작업 5. Korn 셀
34
5.10 개선된 작업 제어 bg [ %job] fg [ %job]
명시된 작업을 후면 프로세서로 다시 시작 명시된 작업이 없으면 마지막 참조된 작업 다시 시작 fg [ %job] 지정된 작업을 전면 프로세서로 다시 시작 kill [-l] [-signal] { process | job }+ 지정된 작업이나 프로세서에 특정한 시그널을 보낸다. 프로세스는 PID 번호에 의해 명시된다. 어떤 시그널도 명시되지 않으면, TERM 시그널이 보내진다. 5. Korn 셀
35
5.11 개선점 파이프 명령어 대치 $ ( command ) |&연산자 : 병렬처리 지원
Continue... 5.11 개선점 파이프 |&연산자 : 병렬처리 지원 명령어 다음에 |&이 나오면 후면 프로세스로 처리, 표준 입출력 채널들은 양방향 파이프를 통해 부모의 셸과 연결되어 실행 print-p 명령어 : 자식 셸의 표준 입력 채널에 보내짐 read-p 명령어 : 자식 셸의 표준 출력 채널에서 가져옴 명령어 대치 $ ( command ) 명령어 치환, $는 프롬프트가 아닌 구문의 일부임 $(< file) : $(cat file) 형식보다 더 빠른 화일 내용 치환 5. Korn 셀
36
5.11 개선점 (예) $ date |& ...자식 프로세서 시작 [1] 8311
Continue... 5.11 개선점 (예) $ date |& 자식 프로세서 시작 [1] $ read -p theDate …자식 프로세스의 표준 출력에서 읽기 [1] + Done date |& … 자식 프로세스 종료 $ echo $theDate … 결과 표시 sun May 10 21:36:57 CDT 1992 $ echo there are $( who | wc -l ) users on system there are 6 users on the system 5. Korn 셀
37
5.11 개선점 변수 융통성 있는 접근 방법 구 문 동 작 ${#name} name값의 길이로 치환
Continue... 5.11 개선점 변수 융통성 있는 접근 방법 구 문 동 작 ${#name} name값의 길이로 치환 ${#name[*]} 배열 name에 있는 원소들의 수로 치환 ${name:+word} name이 설정되어야 하고 non-null로 ${name:=word} 설정되어야하는 것을 제외하면 :을 ${name:?word} 포함하지 않은 구문과 동일한 동작 ${name#pattern} name 앞에 나오는 pattern을 제거한다. ${name##pattern} ${name%pattern} name 끝에 나오는 pattern을 제거한다 ${name%%pattern} 5. Korn 셀
38
5.11 개선점 변수 미리 정의된 지역 변수 $_ $PPID $PWD $OLDPWD
Continue... 5.11 개선점 변수 미리 정의된 지역 변수 $_ $PPID $PWD $OLDPWD $RANDOM $REPLY $SECONDS $CDPATH $COLUMNS $EDITOR $ENV $FCEDIT $HISTFILE $HISTSIZE $LINES $MAILCHECK $MAILPATH $PS $TMOUT $VISUAL (예) $ echo hi there hi there $ echo $_ …이전 명령의 마지막 인수 표시 there $ echo $PPID …셀의 부모 프로세스 id 번호 표시 27709 5. Korn 셀
39
5.11 개선점 변수 1차원 배열 name[subscript]=value
Continue... 5.11 개선점 변수 1차원 배열 name[subscript]=value [ ] 에 0 ~ 511값인 subscript를 사용하여 변수 이름에 할당. subscript 생략시 디폴트값은 0 임 ${ name[subscript] } 를 사용한 배열원소에 접근 5. Korn 셀
40
5.11 개선점 (예) $ cat squares.ksh … list the script I=0
while (( I < 10 )) do (( aquares[$I] = I * I )) …각 원소의 값 지정 (( I = I + 1 )) …반복 계수 값 증가 done echo 5 squared is ${squares[5]} …한 원소의 값 표시 echo list of all squares is ${squares[*]} …모든 원소의 값 표시 $ squares.ksh echo 5 squared is 25 echo list of all squares is 5. Korn 셀
41
5.11 개선점 변수 typeset { - HLRZfiprtux [value] [name [ =word ] ] }*
변수의 생성과 조작을 허용 변수들을 형식화하고, 빠른 계산을 위해 내부 정수 표현으로 바꾸어 줌. 읽기 전용으로 만들며, 범위 전환을 가능하게 만들고, 대.소문자를 서로 바꿀 수 있게 한다 5. Korn 셀
42
Continue... 5.11 개선점 포맷팅 포맷팅 옵션들에서, name의 필드 넓이는 만일 value가 있으면 그 값으로, 아니면 word의 넓이로 설정된다. option : L , R , Z 대/소문자 option : l (소문자로 바꿈), u (대문자로 바꿈) 유형 option : I , r , x 기타옵션 option : f , p , t 5. Korn 셀
43
5.11 개선점 (예) $ cat justify.ksh
wordList[0]=‘ jeff ’ # set three elements. wordList[1]=‘ john ’ wordList[2]=‘ ellen ’ typeset -uL7 wordList # typeset all elements in array. echo ${ wordList[*] } # Shell removes non-quoted spaces echo “ ${wordList[*] } ” # works OK $ justify.ksh JEFF JOHN ELLEN JEFF JOHN ELLEN 5. Korn 셀
44
5.11 개선점 명명되지 않은 변수를 가진 typeset
만일 명명된 변수가 없으면, 명시된 플래그 집합을 가진 모든 매개변수의 이름들이 표시된다. 명시된 플래그가 없으면, 모든 매개변수 목록과 플래그 설정이 표시된다. ( 예) $ typeset 모든 typeset 변수의 목록 표시 export NODEID export PATH … leftjust 7 t export integer MAILCHECK $ typeset -I 정수 typeset 변수의 목록 표시 LINENO=1 MAILDHECK=60 ... 5. Korn 셀
45
5.11 개선점 내장 명령어 cd { name } cd oldName newName
name이 생략되면 $HOME에 의해 지정된 홈 디렉토리로 -와 동등하면 $OLDPWD에 남아 있는 이전 작업 디렉토리로 /로 시작되면 디렉토리의 절대이름이 name인 디렉토리로 다른 것으로 시작되면 $CDPATH에 지정된 디렉토리 순서를 통해 일치하는 것을 찾고 디렉토리로 이동한다. cd oldName newName nameoldName을 newName으로 대치시키며, 새로운 경로 이름으로 변경 현재 디렉토리의 절대 경로 이름을 변수 $PWD에 저장한다 5. Korn 셀
46
5.11 개선점 내장 명령어 set [ -aefhkmnostuvx ] [ -o option ] { arg }*
Continue... 5.11 개선점 내장 명령어 set [ -aefhkmnostuvx ] [ -o option ] { arg }* 변수나 명령라인 매개변수를 지정하거나 모든 변수를 표시 print -nppsuR [ n ] { arg }* 인수를 표준 출력에 표시한 후, newline이 뒤따른다 read -prsu [ n ] [ name?prompt] { name }* 표준 출력에서 변수의 라인을 읽는다. 5. Korn 셀
47
5.11 개선점 ( 예) 121 $ print -u2 hi there …출력을 표준 에러 채널로 전송 hi there
122 $ print -s echo hi there … 출력을 history의 끝에 덧붙임 124 $ r … 명령어 #123 을 다시 호출 echo hi there 125 $ print -R -s hi there -s hi there $ read ‘ name?enter your name ’ enter your name Graham $ echo $name Graham 5. Korn 셀
48
5.11 개선점 내장 명령어 [[ testExpression ]] test testExpression
Continue... 5.11 개선점 내장 명령어 [[ testExpression ]] test testExpression expression이 참이면 0인 종료 코드를 돌려주고 그렇지 않으면 0이 아닌 종료 상태를 반환한다 trap [ command ] [ signal ] arg가 - 이면, 명시된 모든 시그널 동작들은 초기값으로 재설정된다. EXIT나 0 시그널 값이 함수 내의 trap에 주어지면, command는 함수가 종료될 때 수행된다. 5. Korn 셀
49
5.11 개선점 ( 예) $ cat trap.ksh f ( ) { echo ‘ enter f ( ) ‘
trap ‘ echo leaving f … ’ EXIT # set a local trap echo ‘ exit f ( ) ’ } # main program. trap ‘ echo exit shell ’ EXIT # set a global trap f # invoke the function f ( ) $ trap.ksh enter f ( ) exit f ( ) leaving f … … 지역 EXIT 가 트랩됨 exit shell … 전역 EXIT 가 트랩됨 5. Korn 셀
50
5.11 개선점 예제 : JUNK junk -lp {fileName}* 지정된 화일을 지우는 rm대신 사용하는 명령으로,
화일을 지우지않고 $HOME/.junk에 이동시킨다. -l $HOME/.junk의 내용을 보여준다(list). -p $HOME/.junk을 제거한다(purge). 만일 .junk 디렉토리가 없으면 자동으로 생성해준다. 5. Korn 셀
51
5.13 제한된 셀 제한된 Korn 셀은 아래의 내용을 제외하고는 Korn 셀의 모든 기능을 지원한다.
디렉토리를 변경할 수 없다. > 나 >>을 사용하여 출력을 리다이렉트할 수 없다. $SHELL, $ENV 또는 $PATH 환경 변수를 설정할 수 없다. 절대로 경로 이름을 사용할 수 없다. 제한점들은 셀의 “.profile”과 $ENV 파일이 수행된 후 동작된다. 5. Korn 셀
52
6.14 명령 줄 옵션 Korn 셀은 Bourne 셀 명령 줄 옵션과 내장 명령어 set 의 플래그(-x와 -v 포함)와 다음 옵션을 지원한다. 옵션 의미 -r Korn 셀을 제한된 Korn 셀로 만든다. Filename s 옵션이 사용되지 않으면, filename에 있는 셀 명령 을 수행. filename 스크립트 내에서의 Filename은 $0 5. Korn 셀
53
과제 3…10월 21일까지 교재 p240 연습문제 1: ‘junk’ Korn shell script (select 이용)
교재 p240 연습문제 4: ‘pulse’ Korn shell script 과제 제출 방법 Electrical Version : multi.inchon.ac.kr ( )의 ~mysung/2000report/에 자신의 학번으로 디렉토리 만들고 그 안에 복사 Paper Version : 종이에 소스와 실행 과정 및 결과 출력하여 제출 5. Korn 셀
Similar presentations