6. C 셸 한글 전환: Ctrl + Space 해보세요! 이것도 좀 해보세요. cal, bc, hostname, whoami

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
5. Korn 셀.
DB 프로그래밍 학기.
DB 프로그래밍 학기.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Database Laboratory, Hong Ik University
Chapter 7. 조건문.
Homework 4… 11월 4일(금) 11:59pm 까지 Bash 셸 프로그램 개선 교재 p185 연습문제
Chapter 11 The C Shell.
리눅스 기본 명령어 및 Vi 명령어 정리 2015/1, 컴퓨터의 개념 및 실습.
Linux/UNIX Programming
Unix & Shell 사용법 1 번째주 Dept. of Computer Science & Engineering
 13장. 배시쉘 프로그래밍.
UNIX Unbounded A Beginning Approach
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
제6장 C 쉘(C Shell) 숙명여대 창병모
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
Root Filesystem Porting
6. C 셀.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Root Filesystem Porting
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
C++프로그래 밍 컴퓨터정보과 / 이기희교수.
기본 셸로는 Bash 셸을 사용하라. 하지만 스트립트를 실행하기 위해서는 Bourne 셸을 사용하라.
어서와 C언어는 처음이지 제14장.
제4장 유닉스 쉘 숙명여대 창병모 2011 가을.
Linux/UNIX Programming
㈜시스원이 제공하는 시스템 관리 통합 솔루션 SysmanagerOne Agent설치 안내서
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Linux/UNIX Programming
UNIX Unbounded A Beginning Approach
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Linux/UNIX Programming
6장 콘 셸 뇌를 자극하는 Solaris Bible.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
U N I X 창원대학교 전자계산학과 김병찬.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Linux/UNIX Programming
Linux/UNIX Programming
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
제 6 강 Getting started.
시스템 인터페이스 Lab#5 쉘 실습.
시스템 인터페이스 Lab#5 쉡 실습.
Linux/UNIX Programming
Linux 9.X 기초에서 활용까지 Chapter 06 VI 편집기.
 파일 아카이브와 압축 명령 익히기.
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
Chapter 10 데이터 검색1.
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
Homework #3 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
함수, 모듈.
4. 셸을 이용한 명령어 입력. Unix 시스템 쉘 간단한 셸 명령 명령 매개변수(Command arguments)
제4장 유닉스 쉘 숙명여대 창병모
9 브라우저 객체 모델.
제8장 C 쉘 창병모
과제 4: Thread (5월 9일까지) 4장 연습문제 풀이
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
 6장. SQL 쿼리.
Docker Study 6~7.
Linux/UNIX Programming
ARM Development Suite v1.2
Linux/UNIX Programming
SPL-Duino 블록 편집기 이용하기 전류센서 블록 만들기 SPL-Duino 블록 편집기를 실행합니다.
1. 실습 시간에 수행한 avd 생성 및 실행, adb shell 접속 및 명령어 수행 결과를 제출한다.
Presentation transcript:

6. C 셸 한글 전환: Ctrl + Space 해보세요! 이것도 좀 해보세요. cal, bc, hostname, whoami % >xx echo hello % > xx cat echo ^G^G^G …stty 참조 date^M (carriage return) …stty 참조 date^J (line feed, new line) …stty 참조

6.1 소개 6.2 시작하기 Shell의 공통적인 기능 이외에 C Shell에 추가된 기능들 변수를 설정하고 접근하는 여러 가지 방법 조건 분기, 루프, 인터럽트 조작을 지원하는 내장 프로그래밍 언어 별명을 사용한 주문화된 고유명령어 히스토리 메카니즘을 이용한 그 이전 명령어로의 접근 개선된 작업 제어 새로운 내장 명령어와 기존 명령어의 개선 6.2 시작하기 /bin/csh 시작순서 ① $HOME/.cshrc ② /etc/.login ③ $HOME/.login .cshrc (run commands): 자주 쓰이는 별명을 설정함 .login : $TERM, $PROMPT, $PATH 등의 변수 값을 설정함 (예) .cshrc (예) .login Unix 시스템

6.3 변수 ① 지역 변수(단순 변수, 리스트 변수) ② 환경 변수 단순 변수의 값 할당 단순 변수로의 접근 set {name [= word]}* (예) % set  모든 지역 변수의 리스트가 나타남 % set name = M.Y. Sung % set name = "M.Y. Sung" % echo $name 단순 변수로의 접근  $name  변수 name의 값 (독립 사용할 때)  ${name}  변수 name의 값 (접속 사용할 때)  ${?name}  변수 name의 설정되어 있으면 1, 아니면 0의 값 Unix 시스템

6.3 변수 리스트 변수의 값 할당 (예) % set colors = ( red yellow green ) (예) % 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 리스트 변수의 값 할당 set {name = ( {word}* ) }* (예) % set colors = ( red yellow green ) % echo $colors red yellow green Unix 시스템

6.3 변수 리스트 변수로의 접근 ① $name[selector]  리스트 변수 name의 값 (독립 사용할 때) (예) $#argv : 입력라인 매개변수의 개수 ④ ${#name} (접속 사용할 때) Unix 시스템

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 리스트 변수의 추가 원래의 리스트에 원소를 더하고, 이들을 괄호로 묶어 원래 변수로 치환 (예) %set colors = ( red yellow green ) %set colors[4] = pink  Subscript out of range %set colors = ( $colors blue ) %echo $colors  red yellow green blue Unix 시스템

6.3 변수 C shell에 미리 정의된 여러 지역/환경 변수들 (예) % cat var5.csh [교재 p249] $?0 $< $argv $cdpath $cwd $echo $home $history $histchars $mail $noglob $notify $path $prompt $shell $status $time $verbose $savehist $noclobber $nonomatch $ignoreeof (예) % cat var5.csh [교재 p249] echo -n "please enter your name: " set name = $< # take a line of input echo hi $name, your current directory is $cwd Unix 시스템

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

6.4 연산식 C shell의 연산식 ① 문자열 연산식 문자열 연산식 의 미 연산자 == != =~ !~ 같으면 참 ① 문자열 연산식 ② 산술 연산식 ③ 화일 지향적 연산식 문자열 연산식 의 미 연산자 == != =~ !~ 같으면 참 같지 않으면 참 ==와 동일. 단, 오른쪽에 대표문자 포함 !=와 동일. Unix 시스템

6.4 연산식 (예)% cat expr1.csh [교재 p251] 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 Unix 시스템

6.4 연산식 산술 연산식 (C-like) 의 미 연산자 - ! * / % + - << >> 의 미 연산자 - ! * / % + - << >> unary 음수 논리적부정 곱셈,나눗셈,나머지 덧셈, 뺄셈 Bitwise shift <= >= < > 관계 연산 == != 같다, 같지 않다 & ^ | Bitwise and,xor,or && || logical and, or Unix 시스템

6.4 연산식 (예) % cat expr3.csh # set a = 3 set b = 5 if ($a > 2 && $b > 4) then echo expression evaluation seems to work endif Unix 시스템

6.4 연산식 연산식의 결과를 변수에 할당하기 위해서는 set 명령을 사용하지 않는다. (반드시 공백으로 분리) @  모든 셸 변수들을 표시 @variable op expression  변수 variable에 expression의 결과 할당 @variable[index] op expression  variable의 index 번째에 할당 (예) % set a = 2 * 2  set: Syntax error. % @ a = 2 * 2 % echo $a  4 % @ a = $a + $a % @ b = ( $a && $flag )  && 때문에 괄호 필요 % set value = 1 % @ value ++  ++ 혹은 -- 연산 가능 Unix 시스템

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

6.4 연산식 (예) % cat expr4.csh # echo -n "enter the name of the fiie you wish 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 Unix 시스템

6.5 별명(Aliases) (예)% alias  현재의 별명들의 목록을 보여 줌 자신만의 고유한 명령어를 만들어 사용한다 alias [word [string] ] (예)% alias  현재의 별명들의 목록을 보여 줌 (예) % alias word  word가 어떤 string의 별명인지를 보여줌 (예) % alias dir 'ls -aF’ % alias ls 'ls -aF' (예)% alias who 'date; who'  who에 대한 무한루프 발생(error) % alias who 'date; /bin/who'  who의 절대경로 사용 해결 unalias pattern pattern과 일치하는 별명을 제거한다. 만일 pattern에 *가 사용되면 모든 별명을 제거한다. Unix 시스템

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

6.6 히스토리 키보드로부터 받은 명령어들을 순서대로 기억해 둠 번호가 붙여진 명령어 관련환경 변수 효과적인 사용을 위해, prompt에 명령어의 번호가 붙음 % set prompt = ’\! %’ % echo hello 관련환경 변수 $history 히스토리 목록의 크기, default = 1 $savehist 히스토리 화일($HOME/.history) 에 저장되는 명령 어의 수 세션 간에 명령어 접근을 허용하는 능력 (cf) .history 화일은 같은 사용자에 의하여 생성된 모든 대화형 C shell에 의하여 공유된다. (예)$ % set history 40  마지막 40개의 명령어를 기억하도록 함 (예)$ % set savehist 32  세션들 사이에 32개의 명령어를 저장함 Unix 시스템

6.6 히스토리 히스토리 읽기 명령어의 재실행 history [-rh] [number] 재실행된 명령어 텍스트는 echo된 후 실행된다 ① !! 마지막 명령의 텍스트로 치환된다 ② !number 명시된 사건 번호를 갖는 명령의 텍스트로 치환된다 ③ !prefix prefix로 시작되는 마지막 명령의 텍스트로 치환된다 ④ !?substring? substring을 포함하는 마지막 명령의 텍스트로 치환 (예) % !41  41번째 명령어를 실행함 Unix 시스템

6.6 히스토리 히스토리 수정자(modifier) 사건 명시자 바로 뒤에 나와서 이전 명령의 일부에 접근 ① :0 첫 번째 토큰 ② :number (number+1)번째 토큰 ③ :start-end (start+1)부터 (end+1)번째 토큰 ④ :^ 첫 번째 토큰 (:은 생략 가능) ⑤ :$ 마지막 번째 토큰 (:은 생략 가능)  :* 두 번째부터 마지막번째 토큰 (:은 생략 가능) (예)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 Unix 시스템

6.6 히스토리 화일 수정자 대치 수정자 !event:s/pattern1/pattern2/ 기존의 히스토리 수정자에 덧붙여 화일 이름의 특정한 부분을 접근함 ① :h 화일의 바로 앞 부분 ② :r 화일의 루트 부분 ③ :e 화일의 확장자 부분 ④ :t 화일의 뒤 부분 (예) 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 대치 수정자 텍스트가 대치된 후 재실행됨 !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 Unix 시스템

6.7 제어구조 C-like foreach-end foreach name ( wordlist ) commandlist end 명령어 목록이 반복 실행됨, 반복할 때마다 해당 변수가 다른 값을 가짐 (예)% 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 foreach name ( wordlist ) commandlist end Unix 시스템

6.7 제어구조 goto ……… label : 무조건 분기 goto label (예) % cat goto.csh # echo gotta jump! goto endOFScript echo I'll never echo this endOFScript: echo the end % goto.csh gotta jump! the end Unix 시스템

6.7 제어구조 if ( expr) command if ( expr1) then commandlist1 if-then-else-endif if ( expr) command if ( expr1) then commandlist1 else if ( expr2 ) then commandlist2 else commandlist3 endif Unix 시스템

6.7 제어구조 (예) % cat if.csh # echo -n 'enter a number: ' # prompt user. set number = $< if ($number < 0) then echo negative else if ($number == 0) then echo zero else echo positive endif % if.csh enter a number: -1 negative Unix 시스템

6.7 제어구조 Onintr onintr [ - | label ] - 인터럽트 무시 label label로 분기 키보드로부터 ^C (interrupt, SIGINT) 값을 받았을 때 분기하도록 지시 onintr [ - | label ] - 인터럽트 무시 label label로 분기 (예) % cat onintr.csh # onintr controlC while (1) echo infinite loop sleep 2 end controlC: echo control C detected % onintr.csh infinite loop ^C control C detected Unix 시스템

6.7 제어구조 repeat repeat expr command while-end while ( expr ) 단일 명령어를 지정된 시간의 수만큼 반복 수행한다 (예) % repeat 2 echo hi there  2개의 줄 표시 hi there while-end 참인 동안 명령어를 반복 수행함 repeat expr command while ( expr ) commandlist end (cf.) break continue Unix 시스템

6.7 제어구조 (예) % cat multi.csh # set x = 1 # set outer loop value while ($x <= 7) # outer loop set y = 1 # set inner loop value while ($y <= 7) # inner loop @ v = $x * $y # calculate entry echo -n $v " " # display entry @ y ++ # update inner loop counter end echo "" # newline @ x ++ # update outer loop counter % multi.csh 7 1 2 3 4 5 6 7 2 4 6 8 10 12 14 3 6 9 12 15 18 21 4 8 12 16 20 24 28 5 10 15 20 25 30 35 6 12 18 24 30 36 42 7 14 21 28 35 42 49 Unix 시스템

6.7 제어구조 switch-case-endsw switch (expr) case pattern1 : commandlist1 다중 분기 지원 switch (expr) case pattern1 : commandlist1 breaksw case pattern2 : case pattern3 : commandlist2 default : endsw Unix 시스템

6.7 제어구조 (예) cat menu.csh # echo menu test program set stop=0 while ( $stop == 0 ) cat << ENDOFMENU 1 : print the date. 2, 3 : print the current working directory 4 : exit ENDOFMENU echo echo -n 'your choice? ' set reply = $< echo "" switch ($reply) case "1": date breaksw case "2": case "3": pwd case "4": set stop = 1 default: echo illegal choice endsw end Unix 시스템

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

6.7 제어구조 (예) % cat junk.csh #! /bin/csh # junk script # author: Graham Glass # # Initialize variables set fileList = () set listFlag = 0 set purgeFlag = 0 set fileFlag = 0 set junk = ~/.junk # Parse command line foreach arg ($*) switch ($arg) case "-p": set purgeFlag = 1 breaksw case "-l": set listFlag = 1 case -*: each $arg is an illegal option goto error breaksw default: set fileFlag = 1 set fileList = ($fileList $arg) endsw end # # Check for too many options @ total = $listFlag + $purgeFlag + $fileFlag if ($total != 1) goto error # If junk directory doesn't exist, create it if (!(-e $junk)) then 'mkdir' $junk endif Unix 시스템

6.7 제어구조 # # Process options if ($listFlag) then 'ls' -lgF $junk exit 0 endif if ($purgeFlag) then 'rm' $junk/* if ($fileFlag) then 'mv' $fileList $junk # # Display error message and quit error: cat << ENDOFTEXT Dear $USER, the usage of junk is as follows: junk -p means "purge all files" junk -l means "list junked files" junk <list of files> to junk them ENDOFTEXT exit 1 Unix 시스템

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 . → 두 파일을 복사 화일 이름 대치 ① 화일 이름 대치 금지: 변수 $noglob 설정 (default: 비설정) ② 패턴 불일치시 에러 보고 금지: 변수 $nonomatch 설정 (default: 비설정) → Refer to ‘set’, ‘unset’ Unix 시스템

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

6.9 개선점 redirection ① 표준 에러 채널을 리다이렉션: >& 또는 >>& ② 예상 외의 덮어씌우기로부터 화일 보호: $noclobber 설정 (default: 비설정) (예) % (process1 > file1) >& file2 →표준 출력은 file1으로 표준 에러는 file2로 저장함 (예) % set noclobber % cc a.c >& errors errors: File exists. 표준출력 뿐 아니라 표준에러도 pipe시킴 |& (예) % cc a.c |& more (예)% (cc a.c > file1) |& more cc a.c의 표준 출력은 file1으로 저장하고, 명령어 그룹의 출력과 에러 채널을 more로 파이프 처리함 Unix 시스템

6.9 개선점 작업 제어를 위한 추가적 내장명령어 제공 ① stop {%job}*  지정된 작업을 중단한다. %integer 작업번호가 integer인 작업 %prefix prefix로 이름이 시작하는 작업 %+ 마지막으로 참조된 작업 (default) %% %+와 동일 %- 마지막에서 두 번째로 참조된 작업 (예) % stop %man % stop %1 ② suspend  su나 script 등으로 불러들인 shell을 중단시킴 Unix 시스템

6.9 개선점 ③ nice [+/- number] [command]]  command의 우선순위를 number로 설정한다. (적당한 때 수행) 우선순위 number가 높을수록 실행은 더 늦다. 슈퍼유저 만이 음수의 우선순위를 설정할 수 있다. 우선순위가 생략되면 4로 간주한다. command가 명시되지 않으면 현재의 shell에 대한 것으로 간주 ④ nohup command  command를 수행하고 모든 방해조건 으로부터 보호한다 command가 명시되어 있지 않으면 해당 셀의 모든 명령어가 됨 backgounding command도 해당됨에 주의 ⑤ notify {%job}*  지정된 작업이 상태를 바꿀 때 즉시 통보 하도록 한다. 모든 작업에 대해서 할 때는, $notify를 설정한다. Unix 시스템

6.9 개선점 C shell 종료시에, 2개의 끝내기 화일을 탐색 ⑥ 로그인 셀의 다양한 종료 방법 ㈀ logout : login shell만을 종료 ㈁ exit : login shell 및 interactive shell의 종료 ㈂ control-D : 입력 종료 ($ignoreeof이 설정되면 무력해짐) (예) % set ignoreeof % ^D use "logout" to logout % logout C shell 종료시에, 2개의 끝내기 화일을 탐색 ㈀ $HOME/.logout ㈁ /etc/logout (cf.) 끝내기 화일의 주요 내용 임시 디렉토리 지우기, 종료 메시지등 Unix 시스템

6.10 추가 내장 명령어 chdir [path] glob {arg} source [-h] fileName cd와 동일 cho와 비슷하나, 마지막 출력에 공백대신 널(ASCII 0)로 arg 목록을 구분하는 것이 echo와 다름 source [-h] fileName 스크립트가 실행될 대 서브셀로 번역된다. 따라서 원래의 셀에는 아무런 영향을 미치지 못한다. 스크립트를 현재의 셀에의해 번역 실행하여 영향을 주고자 할 때 이 source를 사용한다. -h 스크립트 fileName 안에 있는 명령어들이 단지 히스토리 리스트에 놓임 fileName 스크립트 수행시 발생한 에러는 원래의 셀로 반환된다 (예)% source .login → .login화일을 재실행 (서브셀을 부르지않음) Unix 시스템

6.11 디렉토리 스택 pushd [ +number | name ] popd [ +number ]  명시된 디렉토리를 디렉토리 스택에 추가시킴 ① name이 주어지면, 현재 작업 디렉토리는 스택에 삽입되고, 셀은 주어진 이름의 디렉토리로 옮겨간다 ② -number가 주어지면, 스택의 number번째 원소는 스택의 탑으로 옮겨지고 현재의 작업 디렉토리가 된다. 스택의 원소는 탑을 0으로하여 오름차순으로 번호가 메겨져있다. ③ 인수가 주어지지 않으면, 스택 탑의 두 원소는 자리바꿈을 한다 popd [ +number ]  명시된 디렉토리를 디렉토리 스택에 삭제하고, ① -number가 주어지면, 셀은 스택의 number번째 디렉토리로 옮겨간다 ② 인수가 주어지지 않으면, 셀은 스택 탑의 디렉토리로 옮겨가고 그 디렉토리를 스택에서 삭제한다. Unix 시스템

6.11 디렉토리 스택 dirs  현재 디렉토리 스택의 내용을 보여 준다 hash table (예) % pwd /usr/mysung % pushd / / ~ % pushd /usr/inlude /usr/include / ~ % pushd / /usr/include ~ % popd /usr/inlude ~ hash table C shell은 해시 테이블이라는 내부적 자료 구조를 유지하여 실행화일 탐색을 빠르게 함 ① $PATH가 바뀔 때마다 ② 새로운 실행화일이 $PATH 안의 어떤 디렉토리에 해시 테이블을 다시 작성한다. (예) % rehash → 해시 테이블을 다시 작성 (예) % hashstat → 해시 통계 자료 표시 Unix 시스템

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

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

과제…10월 31일까지 중간 시험 풀이 : paper version only 교재 p 284 연습문제 연습문제 1. track C shell version 연습문제 2. hunt “C 셸 버전으로” 문제 [자료 p40-42] 문제1. watchfor 문제2. pick 문제3. checkmail 2, 3 과제 제출 방법 Electrical Version : multi.inchon.ac.kr (211.119.245.61)의 ~mysung/2000report/에 자신의 학번으로 디렉토리 만들고 그 안에 복사 Paper Version : 종이에 소스와 실행 과정 및 결과 출력하여 제출 Unix 시스템

C 셸 버전 1 문제 1: 다음은 60초 마다 한번씩 mary가 로그인 했는지 조사하는 본 셸 프로그램 watchfor이다. 이 프로그램을 참조하여 매개변수로 입력된 사람이 로그인 했는지 조사하는 C 셸 버전을 작성하되, 여러 사람도 살펴볼 수 있도록 하라. (p157 egrep 참조) $ cat mary PATH=/bin:/usr/bin until who | grep mary do sleep 60 done Unix 시스템

C 셸 버전 2 문제 2: 다음의 pick은 매개변수로 입력된 인수들을 취사선택하는 본 쉘 프로그램이다. 이 프로그램을 코딩하여 실행해 보고, 명령 줄에 아무것도 없으면 표준 입력으로부터 인수를 읽는 pick의 C 셸 버전을 작성하라. 빈 칸을 적절히 다루고, q 도 잘 동작하도록 하라. $ cat pick PATH=/bin:/usr/bin for i do echo “$i? \c” > /dev/tty read response case $response in y*) echo $i ;; q*) break esac done < /dev/tty Unix 시스템

C 셸 버전 3 문제 3 : 다음의 checkmail 본 쉘 프로그램을 코딩하여 실행해 보고 C 셸 버전으로 수정하되 메시지에 메일을 보낸 사람의 이름이 나타나도록 하고 우편함 파일(MAIL)이 존재하지 않더라도 잘 동작하도록 하라. $ cat checkmail PATH=/bin:/usr/bin MAIL=/var/mail/`logname` t=${1-60} x=“`ls -l $MAIL`” while : do y=“`ls -l $MAIL`” echo $x $y x = “$y” sleep $t done | awk ‘$5 < $14 {print “You have mail”}’ Unix 시스템