Presentation is loading. Please wait.

Presentation is loading. Please wait.

6. C 셀.

Similar presentations


Presentation on theme: "6. C 셀."— Presentation transcript:

1 6. C 셀

2 6.1 소개 Shell의 공통적인 기능 이외에 C Shell에 추가된 기능들 변수를 설정하고 접근하는 여러 가지 방법
조건 분기, 루프, 인터럽트 조작을 지원하는 내장 프로그래밍 언어 별명을 사용한 주문화된 고유명령어 히스토리 메카니즘을 이용한 그 이전 명령어로의 접근 개선된 작업 제어 새로운 내장 명령어와 기존 명령어의 개선 6. C 셀

3 6.2 시작하기 /bin/csh 시작순서 .cshrc (run commands): 자주 쓰이는 별명을 설정함
① $HOME/.cshrc ② /etc/.login ③ $HOME/.login .cshrc (run commands): 자주 쓰이는 별명을 설정함 .login : $TERM, $PROMPT, $PATH 등의 변수 값을 설정함 (예) .cshrc (예) .login 6. C 셀

4 6.3 변수 단순 변수의 값 할당 ① 지역 변수(단순 변수, 리스트 변수) ② 환경 변수 set {name [= word]}*
% set name = M.J. KIM % set name = "M.J. KIM" % echo $name 6. C 셀

5 6.3 변수 단순 변수로의 접근  $name  변수 name의 값 (독립 사용할 때)  ${name}
Continue... 6.3 변수 단순 변수로의 접근  $name  변수 name의 값 (독립 사용할 때)  ${name}  변수 name의 값 (접속 사용할 때)  ${?name}  변수 name의 설정되어 있으면 1, 아니면 0의 값 6. C 셀

6 6.3 변수 (예) % set verb = sing % echo I like $verbing
 verbing: undefined variable % echo I like ${verb}ing  I like singing (예) % cat flag.csh # set flag  flag를 null 문자로 설정함 if (${?flag}) then echo flag is set endif % flag.csh  flag is set 6. C 셀

7 6.3 변수 리스트 변수의 값 할당 set {name = ( {word}* ) }*
(예) % set colors = ( red yellow green ) % echo $colors red yellow green 6. C 셀

8 6.3 변수 리스트 변수로의 접근 ① $name[selector]  리스트 변수 name의 값 (독립 사용할 때)
Continue... 6.3 변수 리스트 변수로의 접근 ① $name[selector]  리스트 변수 name의 값 (독립 사용할 때) ② ${name[selector]}  리스트 변수 name의 값 (접속 사용할 때) ③ $#name  리스트 변수 name의 원소들의 개수 (독립 사용할 때) ④ ${#name} (접속 사용할 때) 6. C 셀

9 6.3 변수 cf. selector: start-end 형태, start가 명시 안되면 1로 간주, *는 모든 범위
(예)% set colors = ( red yellow green ) % echo $colors[1]  red % echo $colors[2-3]  yellow green % echo $colors[4]  Subscript out of range % echo $#colors  3 6. C 셀

10 6.3 변수 리스트 변수의 추가 원래의 리스트에 원소를 더하고, 이들을 괄호로 묶어 원래로 치환
(예) %set colors = ( red yellow green ) %set colors[4] = pink  Subscript out of range %set colors = ( $colors blue ) %echo $colors  res yellow green blue 6. C 셀

11 6.3 변수 C shell에 미리 정의된 여러 지역/환경 변수들 $?0 $< $argv $cdpath $cwd
Continue... 6.3 변수 C shell에 미리 정의된 여러 지역/환경 변수들 $? $< $argv $cdpath $cwd $echo $home $history $histchars $mail $noglob $notify $path $prompt $shell $status $time $verbose $savehist $noclobber $nonomatch $ignoreeof 6. C 셀

12 6.3 변수 (예) % cat var5.csh [1-c6p249]
echo -n "please enter your name: " set name = $< # atke a line of input echo hi $name, your current directory is $cwd 6. C 셀

13 6.3 변수 환경 변수의 값 할당 미리 정의된 환경 변수 setenv name word
(예)% setenv TERM vt100 % echo $TERM 미리 정의된 환경 변수 ① 공통적으로 미리 정의된 환경 변수 $HOME $PATH $MAIL $USER $SHELL $TERM ② C shell 특유의 환경 변수  $LOGNAME (셀 소유자의 사용자 id) 6. C 셀

14 6.4 연산식 C shell의 연산식 ① 문자열 연산식 ② 산술 연산식 ③ 화일 지향적 연산식 6. C 셀

15 6.3 변수 문자열 연산식 의 미 연산자 == != =- !~ 같으면 참 같지 않으면 참 ==와 동일.
Continue... 6.3 변수 문자열 연산식 의 미 연산자 == != =- !~ 같으면 참 같지 않으면 참 ==와 동일. 단, 오른쪽에 대표문자 포함 !=와 동일. 6. C 셀

16 6.3 변수 (예)% cat expr1.csh [1-c6p251] # echo -n "do you like C shell?
set reply = $< if ($reply == "yes") then echo you entered yes else if ( $reply =~ y* ) then echo I assume you mean yes endif 6. C 셀

17 6.4 연산식 산술 연산식 (C-like) 의 미 연산자 ~ ! * / % + - << >>
Continue... 6.4 연산식 산술 연산식 (C-like) 의 미 연산자 ~ ! * / % + - << >> unary 음수 논리적부정 곱셈,나눗셈,나머지 덧셈, 뺄셈 bltwise shift <= >= < > 관계 연산 == != 같다, 같지 않다 & ^ | bit, and, xor, or && || logical and, or 6. C 셀

18 6.4 연산식 (예) % cat expr3.csh # set a = 3 set b = 5
Continue... 6.4 연산식 (예) % cat expr3.csh # set a = 3 set b = 5 if ($a > 2 && $b > 4) then echo expression evaluation seems to work endif 6. C 셀

19 6.4 연산식 연산식의 결과를 변수에 할당하기 위해서는 set 명령을 사용하지 않는다. @  모든 셀 변수들을 표시
Continue... 6.4 연산식 연산식의 결과를 변수에 할당하기 위해서는 set 명령을 사용하지 않는다. @  모든 셀 변수들을 표시 @variable op expression  변수 variable에 expression의 결과 할당 @variable[index] op expression  variable의 index번째에 할당 6. C 셀

20 6.4 연산식 (예) % set a = 2 * 2  set: Syntax error. % @ a = 2 * 2
% echo $a  4 a = $a + $a b = ( $a && $flag)  && 때문에 괄호 필요 % set value = 1 value  ++ 혹은 -- 연산 가능 6. C 셀

21 6.4 연산식 화일 지향적 연산식 option "fileName"  만일 옵션이 참이면 1을, 아니면 0을 반환
Continue... 6.4 연산식 화일 지향적 연산식 option "fileName"  만일 옵션이 참이면 1을, 아니면 0을 반환 만일 fileName이 존재하지 않으면 0을 반환 의 미 옵 션 r w x e o z f d 셀은 fileName에 대해 읽기 허가를 갖는다. 쓰기 허가를 갖는다. 실행 허가를 갖는다. fileName이 존재한다. 셀 프로그램와 fileName의 소유자가 동일하다. fileName이 존재하되 크기 가 0이다. fileName은 정규화일이다. fileName은 디렉토리이다. 6. C 셀

22 6.4 연산식 (예) % cat expr4.csh # echo -n "enter the name of the fie you whish to erase: " set filename = $< if ( ! (-w "$filename") ) then echo you do not have permission to erase that file. else rm $filename echo file erased endif 6. C 셀

23 6.5 별명(Aliases) 자신만의 고유한 명령어를 만들어 사용한다 alias [word [string] ]
(예) % alias word  word가 어떤 string의 별명인지를 보여줌 (예) % alias dir 'ls -aF’ % alias ls 'ls -aF' (예)% alias who 'date; who'  who에 대한 무한루프 발생(error) % alias who 'date; /bin/who'  who의 절대경로 사용 해결 6. C 셀

24 6.5 별명(Aliases) unalias pattern pattern과 일치하는 별명을 제거한다.
6. C 셀

25 6.5 별명(Aliases) 유용한 별명 (.cshrc에 저장)
Continue... 6.5 별명(Aliases) 유용한 별명 (.cshrc에 저장) % alias cd 'cd \!*; set prompt="$cwd\!>"; ls 지정된 디렉토리로 이동하고, prompt를 현재의 디렉토리와 마지막 명령 번호를 포함하도록 한 후, 현재의 목록을 보여줌 \!* (두 번째부터 마지막번째까지의 토큰 즉 모든 인수들) \! (마지막 명령어의 번호) % alias ls 'ls -F'  화일과 디렉토리에 관한 추가 정보 보이기 6. C 셀

26 6.5 별명(Aliases) % alias rm 'rm -i'  지울지 말지 확인을 먼저한다.
% alias rm 'mv \!* ~/tomb'  지울 대상을 tomb 디레토리 밑으로 옮김 % alias h 'history'  히스토리 정보 얻기 % alias vi 'mesg n; /bin/vi \!*; mesg y'  vi 편집 기간동안 타인으로부터의 메시지 전달 방해 억제 % alias moer 'more'  일어나기 쉬운 오타 방지 % alias ls-l 'ls -l'  일어나기 쉬운 오타 방지 % alias ll 'ls -l’  상세한 목록 정보 얻기 6. C 셀

27 6.6 히스토리 번호가 붙여진 명령어 키보드로부터 받은 명령어들을 순서대로 기억해둠
효과적인 사용을 위해, prompt에 명령어의 번호가 붙음 % set prompt = '\! %’ 1 % echo hello 6. C 셀

28 6.6 히스토리 관련환경 변수 $history $savehist 히스토리 목록의 크기, defualt = 1
Continue... 6.6 히스토리 관련환경 변수 $history 히스토리 목록의 크기, defualt = 1 $savehist 히스토리 화일($HOME/.history) 에 저장되는 명령 어의 수 세션 간에 명령어 접근을 허용하는 능력 cf. .history화일은 같은 사용자에 의하여 생성된 모든 대화형 C shell에 의하여 공유된다. 6. C 셀

29 6.6 히스토리 (예)$ % set history 40  마지막 40개의 명령어를 기억하도록 함
(예)$ % set savehist 32  세션들 사이에 32개의 명령어를 저장함 6. C 셀

30 6.6 히스토리 히스토리 읽기 history [-rh] [number] 옵션이 없으면 마지막 $history 명령을 나열한다
 마지막 3개의 명령어를 역순으로 읽음 6. C 셀

31 6.6 히스토리 명령어의 재실행 재실행된 명령어 텍스트는 echo된 후 실행된다 ① !! 마지막 명령의 텍스트로 치환된다
① !! 마지막 명령의 텍스트로 치환된다 ② !number 명시된 사건 번호를 갖는 명령의 텍스트로 치환된다 ③ !prefix prefix로 시작되는 마지막 명령의 텍스트로 치환된다 ④ !?Substring? substring을 포함하는 마지막 명령의 텍스트로 치환 (예) % !41  41번째 명령어를 실행함 6. C 셀

32 6.6 히스토리 히스토리 수정자(midifier) 사건 명시자 바로 뒤에 나와서 이전 명령의 일부에 접근
Continue... 6.6 히스토리 히스토리 수정자(midifier) 사건 명시자 바로 뒤에 나와서 이전 명령의 일부에 접근 ① : 첫 번째 토큰 ② :number (number+1)번째 토큰 ③ :start-end (start+1)부터 (end+1)번째 토큰 ④ :^ 첫 번째 토큰 (:은 생략 가능) ⑤ :$ 마지막 번째 토큰 (:은 생략 가능) ⑥ :* 두 번째부터 마지막번째 토큰 (:은 생략 가능) 6. C 셀

33 6.6 히스토리 (예)48 % echo I like horseback riding I like horseback riding
49 % !!:0 !!:1 !!:2 !!:4 echo I like riding I like riding 50 % echo !48:1-$ echo I like horseback riding 6. C 셀

34 6.6 히스토리 화일 수정자 기존의 히스토리 수정자에 덧붙여 화일 이름의 특정한 부분을 접근함 ① :h 화일의 바로 앞 부분
Continue... 6.6 히스토리 화일 수정자 기존의 히스토리 수정자에 덧붙여 화일 이름의 특정한 부분을 접근함 ① :h 화일의 바로 앞 부분 ② :r 화일의 루트 부분 ③ :e 화일의 확장자 부분 ④ :t 화일의 뒤 부분 6. C 셀

35 6.6 히스토리 (예) 53 % ls /usr/include/stdio.h  /usr/include/stdio.h
54 % echo !53:1:h  /usr/inlcude 55 % echo !53:1:r  /usr/inlcude/stdio 56 % echo !53:1:e  h 57 % echo !53:1:t  stdio.h 6. C 셀

36 6.6 히스토리 대치 수정자 텍스트가 대치된 후 재실행됨 !event:s/pattern1/pattern2/
(예)58 % ls /usr/include/stdio.h  /usr/include/stdio.h 58 % !58:0 !58:1:s/stdio/signal/  /usr/include/signal.h 6. C 셀

37 6.7 제어구조 foreach-end C-like 명령어 목록이 반복 실행됨, 반복시마다 해당 변수가 다른 값을 가짐
Continue... 6.7 제어구조 C-like foreach-end 명령어 목록이 반복 실행됨, 반복시마다 해당 변수가 다른 값을 가짐 foreach name ( wordlist ) commandlist end 6. C 셀

38 6.7 제어구조 (예)% cat foreach.csh # foreach color (red yellow green blue)
echo one color is $color end % foreach.csh one color is red one color is yellow one color is green one color is blue 6. C 셀

39 6.7 제어구조 goto 무조건 분기 goto label ……… label : 6. C 셀

40 6.7 제어구조 if-then-else-endif if ( expr) command if ( expr1) then
commandlist1 else if ( expr2 ) then commandlist2 else commandlist3 endif 6. C 셀

41 6.7 제어구조 Onintr 키보드로부터 ^C (interrrupt, SIGINT) 값을 받았을 때 분기하도록 지시
onintr [ - | label ] - 인터럽트 무시 label label로 분기 6. C 셀

42 6.7 제어구조 repeat (예) % repeat 2 echo hi there  2개의 줄 표시
단일 명령어를 지정된 시간의 수만큼 반복 수행한다 (예) % repeat 2 echo hi there  2개의 줄 표시 hi there repeat expr command 6. C 셀

43 6.7 제어구조 switch-case-endsw 다중 분기 지원 switch (expr) case pattern1 :
commandlist1 breaksw case pattern2 : case pattern3 : commandlist2 defaut : endsw 6. C 셀

44 6.7 제어구조 while-end 참인 동안 명령어를 반복 수행함 while ( expr ) commandlist end
cf. break continue 6. C 셀

45 6.7 제어구조 예제 : JUNK junk -lp {fileName}* 지정된 화일을 지우는 rm대신 사용하는 명령으로,
화일을 지우지않고 $HOME/.junk에 이동시킨다. -l $HOME/.junk의 내용을 보여준다(list). -p $HOME/.junk을 제거한다(purge). 만일 .junk 디렉토리가 없으면 자동으로 생성해준다. 6. C 셀

46 6.9 개선점 명령어 재실행을 위한 최적 방법 메타문자 { } pattern1^pattern2
(예) % cc fil.txt → Can't open file fil.txt % ^fil^file → cc file.txt 메타문자 { } a{b,c}d → abd acd(접두사, 접미사의 입력시간 감소) (예) % cp /usr/include/{stdio,signal}.h . → 두 파일을 복사 6. C 셀

47 6.9 개선점 화일 이름 대치 ① 화일 이름 대치 금지: 변수 $noglob 설정 (default: 비설정)
Continue... 6.9 개선점 화일 이름 대치 ① 화일 이름 대치 금지: 변수 $noglob 설정 (default: 비설정) ② 패턴 불일치시 에러 보고 금지: 변수 $nonomatch 설정 (default: 비설정) 6. C 셀

48 6.9 개선점 (예) % echo *p prog1.c prog2.c % set noglob → 대표문자 처리 금지
(예) % echo *a echo: No match. % set nonomatch % echo *a *a → 에러 발생하지않고 원래 패턴 인쇄 6. C 셀

49 6.9 개선점 redirection ① 표준 에러 채널을 리다이렉션: >& 또는 >>&
② 에상외의 덮어씌우기로부터 화일 보호: $noclobber 설정 (default: 비설정) (예) % (process1 > file1) >& file12 →표준 출력은 file1으로 표준 에러는 file2로 저장함 (예) % set noclobber % cc a.c >& errors errors: File exists. 6. C 셀

50 6.9 개선점 표준출력 뿐 아니라 표준에러도 pipe시킴 |& (예) % cc a.c |& more
(예)% (process1 > file1) |& process2 process1의 표준 출력은 file1으로 저장하고, 명령어 그룹의 출력과 에러 채널을 process2로 파이프 처리함 6. C 셀

51 6.9 개선점 작업 제어를 위한 추가적 내장명령어 제공 ① stop {%job}*  지정된 작업을 중단한다.
Continue... 6.9 개선점 작업 제어를 위한 추가적 내장명령어 제공 ① stop {%job}*  지정된 작업을 중단한다. %job [1-c5p216] %integer 작업번호가 integer인 작업 %prefix prefix로 이름이 시작하는 작업 %+ 마지막으로 참조된 작업 (default) %% %+와 동일 %- 마지막에서 두 번째로 참조된 작업 (예) % stop %man % stop %1 6. C 셀

52 Continue... 6.9 개선점 ② suspend  su나 script 등으로 불러들인 shell을 중단시킴 6. C 셀

53 6.9 개선점 ③ nice [+/- number] [command]]  command의 우선순위를 number로 설정한다.
Continue... 6.9 개선점 ③ nice [+/- number] [command]]  command의 우선순위를 number로 설정한다. (적당한 때 수행) 우선순위가 높을수록 실행은 더 늦다. 슈퍼유저 만이 음수의 우선순위를 설정할 수 있다. 우선순위가 생략되면 4로 간주한다. command가 명시되지 않으면 현재의 shell에 대한 것으로 간주 6. C 셀

54 6.9 개선점 ④ nohup command  command를 수행하고 모든 방해조건 으로부터 보호한다
Continue... 6.9 개선점 ④ nohup command  command를 수행하고 모든 방해조건 으로부터 보호한다 command가 명시되어 있지 않으면 해당 셀의 모든 명령어가 됨 backgounding command도 해당됨에 주의 6. C 셀

55 6.9 개선점 ⑤ notify {%job}*  지정된 작업이 상태를 바꿀 때 즉시 통보 하도록 한다.
Continue... 6.9 개선점 ⑤ notify {%job}*  지정된 작업이 상태를 바꿀 때 즉시 통보 하도록 한다. 모든 작업에 대해서 할 때는, $notify를 설정한다 ⑥ 로그인 셀의 다양한 종료 방법 ㈀ logout : login shell만을 종료 ㈁ exit : login shell 및 interactive shell의 종료 ㈂ control-D : 입력 종료 ($ignoreeof이 설정되면 무력해짐) 6. C 셀

56 6.9 개선점 C shell 종료시에, 2개의 끝내기 화일을 탐색 (예) % set ignoreeof % ^D
Continue... 6.9 개선점 (예) % set ignoreeof % ^D use "logout" to logout % logout C shell 종료시에, 2개의 끝내기 화일을 탐색 ㈀ $HOME/.logout ㈁ /etc/logout cf. 끝내기 화일의 주요 내용 임시 디렉토리 지우기, 종료 메시지등 6. C 셀

57 6.10 추가 내장 명령어 chdir[path] glob {arg} cd와 동일
cho와 비슷하나, 마지막 출력에 공백대신 널(ASCII 0)로 arg 목록을 구분하는 것이 echo와 다름 6. C 셀

58 6.10 추가 내장 명령어 source [-h] fileName
(예)% source .login → .login화일을 재실행 (서브셀을 부르지않음) 6. C 셀

59 6.11 디렉토리 스택 pushd [ +number | name ]  명시된 디렉토리를 디렉토리 스택에 추가시킴
② -number가 주어지면, 스택의 number번째 원소는 스택의 탑으로 옮겨지고 현재의 작업 디렉토리가 된다. 스택의 원소는 탑을 0으로하여 오름차순으로 번호가 메겨져있다. ③ 인수가 주어지지 않으면, 스택 탑의 두 원소는 자리바꿈을 한다 6. C 셀

60 6.11 디렉토리 스택 popd [ +number ]  명시된 디렉토리를 디렉토리 스택에 삭제하고,
 명시된 디렉토리를 디렉토리 스택에 삭제하고, ① -number가 주어지면, 셀은 스택의 number번째 디렉토리로 옮겨간다 ② 인수가 주어지지 않으면, 셀은 스택 탑의 디렉토리로 옮겨가고 그 디렉토리를 스택에서 삭제한다. 6. C 셀

61 6.11 디렉토리 스택 dirs  현재 디렉토리 스택의 내용을 보여준다 (예) % pwd /usr/mjkim
 현재 디렉토리 스택의 내용을 보여준다 (예) % pwd /usr/mjkim % pushd / / ~ % pushd /usr/inlude /usr/include / ~ % pushd / /usr/include ~ % popd /usr/inlude ~ 6. C 셀

62 6.11 디렉토리 스택 hash table C shell은 해시 테이블이라는 내부적 자료 구조를 유지하여 실행화일 탐색을 빠르게 함 ① $PATH가 바뀔 때마다 ② 새로운 실행화일이 $PATH 안의 어떤 디렉토리에 해시 테이블을 다시 작성한다. (예) % rehash → 해시 테이블을 다시 작성 (예) % hashstat → 해시 통계 자료 표시 6. C 셀

63 6.12 명령줄 옵션 만일 명령 줄의 첫째 인수가 -라면, C shell은 login shell로 시작된다.
Continue... 6.12 명령줄 옵션 만일 명령 줄의 첫째 인수가 -라면, C shell은 login shell로 시작된다. 여기에 추가로 C shell은 다음의 명령 줄 옵션을 지원한다. 표준 입력으로부터 한 줄을 읽고 실행한다. 의 미 옵션 -c string -e -f string 명령을 실행하기 위하여 셀을 생성한다. 어떤 명령어가 0이 아닌 종료 코드를 반환하면, 셀은 종료된다. 셀은 시작하지만, .cshrc에서 명령을 읽지는 않는다. -t -v -V $verbose를 설정하게 한다. .cshrc이 실행되기 전에 $verbose를 설정하는 것을 제외하고는 -v와 같다. 6. C 셀

64 6.12 명령줄 옵션 의 미 옵션 의 미 -i -n -s 대화형 셀을 형성한다. 즉, SIGTERM, SIGINT, SIGQUIT 메시지를 모두 무시하는 것을 제외하고는 -s와 같다. 명령을 문법적으로 분석 하지만, 실행하지는 않는다. 단지 디버깅을 위한 것임 표준 입력으로부터 명령을 읽고 셀 메시지를 표준 에러 채널에 보내는 셀을 생성한다. -x -X fileName .cshrc가 읽혀지기 전에 $echo를 설정하는 것을 제외하고는 -x와 같다. 만일 -c, -i, -s, -t 옵션이 사용되지 않으면 fileName에 있는 셀 명령어들을 실행한다. fileName 스크립트 내에서 fuleName은 $0이다. $echo를 설정하게 한다. 6. C 셀


Download ppt "6. C 셀."

Similar presentations


Ads by Google