제6장 C 쉘(C Shell) 숙명여대 창병모 2009.10.

Slides:



Advertisements
Similar presentations
Apr. 25, 2013 Laboratory of Systems Medicine BASIC LINUX COMMANDS.
Advertisements

Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티.
SPARCS 10 이 가 영 기본 UNIX 명령어. 일단 로그인 ! Linux login 시 계정을 입력하거나 root 를 입력 Root -> # 일반 사용자 -> $ 패스워드 : echo 기능을 꺼서 볼 수 없다. 대소문자 구분 패스워드 처음 설정 시 : ~$ passwd.
쉘 스크립트와 cron coearth, george.
제2장 사용자를 위한 UNIX 숙명여대 창병모
시작부터 끝까지 진지한 궁서체로 진행하는 완벽한 주입식의 하드코어한 리눅스/장난감 세미나
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Linux University of Seoul Computer Science Park Jong wook
Chapter 10 The Bourne Shell
컴퓨터 네트워크 실습.
Unix(Linux) shell programming
디렉토리 다루기 ㅎㅎ 유닉스 파일 시스템 현재 디렉토리 확인 : pwd 디렉토리 이동 : cd
Homework 4… 11월 4일(금) 11:59pm 까지 Bash 셸 프로그램 개선 교재 p185 연습문제
Chapter 11 The C Shell.
리눅스 기본 명령어 및 Vi 명령어 정리 2015/1, 컴퓨터의 개념 및 실습.
제3장 유닉스 쉘.
Linux/UNIX Programming
Unix & Shell 사용법 1 번째주 Dept. of Computer Science & Engineering
제6장 쉘 창병모
 13장. 배시쉘 프로그래밍.
[beginning] Linux & vi editor
UNIX Unbounded A Beginning Approach
Linux/UNIX Programming
UNIX Unbounded A Beginning Approach
컴퓨터 네트워크 실습.
콘 쉘 활용하기 ㅎㅎ 기본 사용법 익히기 입출력 방향 변경 콘 쉘의 환경설정 콘 쉘 명령 다루기 프롬프트 설정하기
Linux/UNIX Programming
제2장 유닉스/리눅스 사용.
5. 네트워킹 사용자 표시 : users/ rusers/who/w users 지역 호스트 상에 있는 사용자의 간단한 목록 표시
파일 및 디렉토리(1) 여러 함수들 chdir(“category”) || die “cannot cd to temp”;
IS lab. 김건영 Awk, Posting list IS lab. 김건영
C / C++ Programming in multi platform
Internet Protocol and Programming
6. C 셀.
정보검색 환경세팅 및 쉘스크립트 맛보기 IS lab. 김건영.
제2장 사용자를 위한 UNIX 숙명여대 창병모 2011 가을.
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
기본 셸로는 Bash 셸을 사용하라. 하지만 스트립트를 실행하기 위해서는 Bourne 셸을 사용하라.
4장 제어문 선택문: if 문, if – else 문, switch 문
6. 파일 관리. pwd(print working directory)와 cd(change directory) ls(list)
6. C 셸 한글 전환: Ctrl + Space 해보세요! 이것도 좀 해보세요. cal, bc, hostname, whoami
제4장 유닉스 쉘 숙명여대 창병모 2011 가을.
Linux/UNIX Programming
Linux/UNIX Programming
툴 설치 가이드 Formality SynopsysMentor.
Internet Protocol and Programming
editing program files with vi 기본적인 Linux commands
Linux/UNIX Programming
6장 콘 셸 뇌를 자극하는 Solaris Bible.
U N I X 창원대학교 전자계산학과 김병찬.
4장 솔라리스와 디렉토리 뇌를 자극하는 Solaris Bible.
Linux/UNIX Programming
Linux/UNIX Programming
Command line tools 한국어 정보의 전산 처리
제 6 강 Getting started.
시스템 인터페이스 Lab#5 쉘 실습.
시스템 인터페이스 Lab#5 쉡 실습.
Linux/UNIX Programming
과제 1, 과제2 과제1 : 1999년 9월 30일(목)까지 과제 2 : 1999년 10월 15일(금)까지
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
Homework #3 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
Internet Protocol and Programming
4. 셸을 이용한 명령어 입력. Unix 시스템 쉘 간단한 셸 명령 명령 매개변수(Command arguments)
제4장 유닉스 쉘 숙명여대 창병모
제8장 C 쉘 창병모
Linux/UNIX Programming
Linux/UNIX Programming
Linux/UNIX Programming
Intelligent software Lab. 전재원
Presentation transcript:

제6장 C 쉘(C Shell) 숙명여대 창병모 2009.10

서론 C 쉘의 새로운 특징 여러 변수 설정 및 접근 방법 프로그래밍 언어 조건 분기, 루프, 인터럽트 처리 이명을 사용한 마춤형 명령어(command customization) 역사(history) 메커니즘 고급 작업 제어(advanced job control)

시작 C 쉘의 시작 과정 login shell 로그인할 때 생성된 C 쉘 shell 손수 생성된 C 쉘

시작 파일 .login 파일 .cshrc 파일 환경 변수 설정 이명 설정 등 개인적인 설정 echo -n “Enter your terminal type:” set termtype=$< set term=vt100 if (“$termtype” != “ “) set term=“$termtype$” set path=(. /bin /usr/bin /usr/local/bin) stty erase “^?” kill “^U” intr “^C” eof “^D” set history = 40 set prompt = “! %” .cshrc 파일 이명 설정 등 개인적인 설정

단순 변수 단순 변수 생성 및 배정 set {name [= word]}* 단순 변수 접근

변수: 예 %set flag %echo $flag %set color=red %set name=“Graham Glass” %echo $name %set … display all local variables %set verb=sing %echo I like $verbing %echo I like ${verb}ing

리스트 변수 리스트 변수 생성 및 배정 리스트 변수 접근 리스트 구성 set {name = ( {word}* ) }* % set colors = (red yellow blue) 리스트 변수 접근 리스트 구성 리스트 끝에 새로운 원소 추가 : (list element)

리스트 변수: 예 %set colors=(red yellow green) %echo $colors[1] %set colors[4]=blue %set colors = ($colors blue) %echo $colors %set colors = $colors black %set girls =(sally georgia) %set boys=(harry blair) %set both=($girls $boys)

지역 변수(local variable) 사전 정의 지역 변수(Predefined local variables)

환경 변수(environment variable) 환경 변수 생성 및 배정 setenv name word 사전 정의 환경 변수(Predefined environment variable)

식(Expressions) # echo -n “do you like the C shell ?” set reply = $< if ($reply == “yes”) then echo you entered yes else if ($reply =~ y*) then echo I assume you mean yes endif

스트링 연산

산술연산

식: 예 %set a =2*2 %@ a = 2 * 2 %echo $a %@ a = $a + $a %set flag = 1 %@ b = ($a && $flag) %echo $b # echo -n “enter the name of file …” set filename = $< if (! (-w “$filename”)) then ...

식: 계산 결과

파일-관련 식

이명(Alias) 명령어 유용한 것 ls ls -F rm rm -i rm mv \!* ~/tomb h history alias [word [string]] unalias pattern 유용한 것 ls ls -F rm rm -i rm mv \!* ~/tomb h history ls-l ls -l mroe more

alias cd 'cd \!*; set prompt= "$cwd \!>" ' 이명 이명 공유 서브쉘에서도 이용 가능하기 위해서는 이명 정의를 ".cshrc”에 두어야 한다. 매개변수를 이용한 이명 역사 메커니즘을 이용하여 이미 이명된 명령어의 인자를 사용할 수 있다. alias cd 'cd \!*; set prompt= "$cwd \!>" '

역사(History) 명령어 숫자 붙이기 명령어 기억 크기 역사 읽기 % set prompt='\! %' ... \! means the event number 명령어 기억 크기 % set history = 40 % set savehist = 32 % history 역사 읽기 history [-rh] [number]

역사: 명령어 재실행

제어 구조 프로그래밍 언어처럼 만들기 위해 C Shell script CGI programming in Internet # foreach color (red yellow green blue) echo one color is $color end

제어구조:foreach

제어구조: 예 if.csh # echo -n ‘enter a number: ‘ set number = $< if ($number < 0) then echo negative else if ($number ==0) then echo zero else echo positive endif

제어구조:if

제어구조:repeat %repeat 2 echo hi there

제어구조: 예 menu.csh switch ($reply) # case “1” : date echo menu test program set stop = 0 while ($stop == 0) cat << ENDOFMENU 1 : print the date 2,3 : print the cwd 4 : exit ENDOFMENU echo -n ‘your choice ?’ ‘ set reply = $< switch ($reply) case “1” : date breaksw case “2”: case “3”: pwd case “4”: set stop = 1 default: echo illegal choice endsw end

제어구조:switch

제어구조:while

제어구조:예 multi.csh %multi.csh 7 # 1 2 3 4 5 6 7 set x = 1 while ($x <= $1) set y = 1 while ($y <= $1) @ v = $x * $y echo -n $v “ “ @ y++ end echo “ “ @ x++ %multi.csh 7 1 2 3 4 5 6 7 2 4 6 8 10 12 14 3 6 9 . . .

샘플 프로젝트: Junk junk -lp {fileName}* -l option : “.junk”의 현재 상태를 리스트한다. -p option : “.junk” 휴지통 비우기

샘플 프로젝트: Junk #! /bin/csh set fileList = ( ) set listFlag = 0 set purgeFlag= 0 set junk = ~/.junk foreach arg ($*) switch ($arg) case “-p” : set purgeFlag = 1 breaksw case “-l” : set listFlag = 1 case -* : echo $arg is an illegal option goto error default: set fileFlag = 1 set fileList = ($fileList $arg) endsw end

샘플 프로젝트: Junk @ total = $listFlag + $purgeFlag +$fileFlag if ($total !=1) goto error if (! (-e $junk)) then ‘mkdir’ $junk endif if ($listFlag) then ‘ls’ -lgF $junk exit 0 if ($purgeFlag) then ‘rm’ $junk/* if ($fileFlag) then ‘mv’ $fileList $junk error: ...

예: 파일 수 세기 #count number of files and #directories in argument 1 #or current directory #usage: numfiles [directory] if ($#argv == 0) then set dir = “.” else set dir = $argv[1] endif if (! -d $dir) then echo $0\: $dir not a directory exit 1

예: 파일 수 세기 echo $dir\: @ fcount = 0 @ dcount = 0 cd $dir foreach file (*) if (-f $file) then @ fcount++ else if (-d $file) then @ dcount++ endif end echo $fcount files $dcount dirs

향상된 기능들 A shortcut for command re-execution The { } metacharacters Filename substitution Redirection Built-in

명령어 재실행 A shortcut Re-execute the previous command with a slight modification ^pat1^pat2 %cc fil.txt %^fil^file Metacharacter { } a{b,c}d means abd acd %cp /usr/include/{stdio,signal}.h /tmp

파일이름 대치 파일 이름 대치 무효화 매치되지 않는 상황 $noglob 변수 set %set noglob %echo a* p* %set noglob 매치되지 않는 상황 $nonomatch 변수 set %echo a* b* echo: No match. %set nonomatch

리디렉션 Redirect stdout Redirect stdout & stderr Redirect only stderr %cc a.c > errors Redirect stdout & stderr %cc a.c >& errors Redirect only stderr %(cc a.c > out) >& errors Protecting file overwrite %ls -l errors %set noclobber errors: File exists

파이프(pipe) Pipe stdout %cc a.c| more Pipe stdout & stderr command1 | command2 %cc a.c| more Pipe stdout & stderr command1 |& command2 %cc a.c |& more Pipe only stderr (process1>file) |& process2 %(cc a.c > out) |& more

기타 Terminating login Source - Control-D - exit - logout %set ignoreeof Use “logout” to logout %logout Source Execute a script on the original shell %source .login

고급 프로그래밍 기법

터미널에서 루프 스크립트 없이 터미널에서 while 혹은 foreach 가능 %foreach f (*) ? If (-d $f) continue ? Set fn = `ls -l $f | grep “Dec 13”` ? If ($#fn) rm -I $f ? end

인터럽트 처리 onintr label 인터럽트가 발생하면 해당 레이블로 제어 이전 # onintr controlC while (1) echo infinite loop sleep2 end controlC: echo control-C detected

임시파일 생성 필요하면 /tmp에 임시 파일 생성 파일에 대한 유일한 이름 만들기 if ($#argv == 0) then # csh script to remove blank lines from file if ($#argv == 0) then echo ‘Usage : rmxlf file(s) exit 1 endif set com = $0 set tf = /tmp/$com:t.$$ foreach file ($argv[*]) awk “NR%s == 0” $file > $tf mv $tf $file end

자기호출 스크립트 chgmode # Recursive csh to change mode if ($#argv <2) then echo “Usage: chgmode mode dir” exit 1 endif if (! (-d $argv[2]) then echo “$argv[2] not a directory” exit 1 endif cd $argv[2] chmod $argv[1] * foreach f (*) if (-d $f) then chgmode $argv[1] $f end

디버깅 csh -vx script [arguments] % csh -v menu.csh % csh -x menu.csh % csh -vx menu.csh

지침(guideline) 재발명하지 말라. 왜 스크립트를 사용하는가 Unix 명령어로 해결할 수 있는 작업은 C 프로그램보다 C 스크립트로 작성하라. 텍스트 줄을 처리하는 작업 grep, sort, awk, 등 이용 왜 스크립트를 사용하는가 생성하고 유지하기 쉽다. 디버깅도 쉽다.

지침 스크립트을 위한 틀 리디렉션과 파이프 사용을 허용하라 인자의 수와 형태를 검사하라 파일과 디렉토리가 있는지 검사하라 적당한 오류 메시지를 내라.

효율을 위한 지침 프로세스 생성 경로명 탐색 C 쉘은 외부 명령어를 실행하기 위해 새로운 프로세스를 생성한다. 따라서 foreach f (`ls`)보다는 foreach f (*)을 사용하는 것이 좋다. 경로명 탐색 긴 경로명은 부담이 될 수 있다. cd $dir foreach file ($dir/*) foreach file (*) … … end end

효율을 위한 지침 산술 계산 문자 계산 C 쉘은 산술 계산을 위한 언어가 아니다. 쉘 변수의 개별 문자를 접근하는 것은 어렵고 부담이 된다.

효율을 위한 지침 파이프를 이용한 명령어 결합 빠른 쉘 시작 %csh -f script [arguments] %sort tax | grep “business expense” | lpr %grep “business expense” tax| sort | lpr 빠른 쉘 시작 ~/.cshrc 실행하지 않는다 %csh -f script [arguments] csh 스크립트 내에서 #! /bin/csh -f