REPORTUNIX남은미 교수님98004048김용구SHELL이란?명령어 해석기 OR 유틸리티와 커널 사이에 위치해서 상호 작용을 담당한다.기능: 크게 두가지 기능 명령어 해석기 와 셸 스크립트를 위한 프로그래밍 언어 제공셸절대 경로명Bourne/bin/shKorn/bin/kshC/bin/cshKorn 셸은 Bourne 셸에서 수행되는 모든 명령 인식 C 셸은 대학이나 연구단체에 있는시스템이 기본 셸로 제공되고 있어 인기가 높다.Bourne 셸-스크립트 프로그램이 용이 < .profile 특수파일 포함 >C 셸 – 좋은 작업환경 (명령어 해석기) < .cshrc 특수파일 포함>Bourne 셸1.1 개요Stephen Bourne 에 의해 만들어진 최초의 대중화된 Unix 셸로서 대부분의 Unix셸에서 작동한다.셸을 실행하는 방법 : 1리다이렉션 실행,2실행 명령어로 만들어 사용,3 sh 명령어 사용(리다이렉션을 사용하는 방법은 매게변수를 제공할수 없기 때문에 잘사용하지 않는다.)변수사용자 변수(user variable) 와 셸에 의해서 지정된 셸변수(환경변수) 이다.변수값할당 “=” 사용 (공백을 주어서는 안된다.)변수값참조 변수명앞에 “$” 사용echo $my name #”$” 를 출력$myname=”kim yong gu”$echo “$myname” #다수의 공백 출력$list=s*$echo “$list” #특수문자 “*”로 표현변수값 삭제는 NULL 로지정 (값만 변경) “UNSET”명령은 변수자체를 삭제${var} 변수명 일부로 인식${var-word} var가 설정되어 있으면 var 값을, 그렇지 않으면 word 값으로 대치${var+word} var가 설정되었을 때만 word 값으로 대치${var=word} var가 설정되어 있지 않으면 var에 word를 할당 var 가 설정되어word는 표준에러로 출력${var?word} var가 설정되어있으면 var 출력 설정되어있지않으면 word는 표준에러로 츨력read 명령-사용자가 입력한정보 저장,여러 개의 num –eq 0 ]thenecho “zero number”elseecho “nagative number”ficase 문case $num in“1”)date;;“a” |”A”|[A-C])pwd;;*)echo “usage :input number?”;;esac반복문(for, while, until)for num in 0 1 2 3doecho “number is $num ;c”done----------------------------I=0Total=0while [ $I –le 10 ]doTotal=`expr $total + $I`I=`expr $I +1`done----------------------------until 문은 while 문과 비슷하다 그러나 조건을 만족할때까지 반복--------------------------------------------------1.5 분기명령(break,continue)break,continue 명령으로 실행중에 인터럽트가 가능하다.1.6 사용자 환경파일 (.profile)-처음 로그인 하면 홈 디렉토리에 있는 .profile 이라는 셸이 실행된다.사용자의 터미널타입 , 홈 디렉토리, 검색경로, 셸 정보, 시간 설정 값들이 들어 있다.set 명령 – 모든 환경변수와 현재 설정되어 있는 값들의 목록을 보여준다.환경 변수의미HOME사용자가 처음로그인할 때 홈 디렉토리 위치를 저장PATH셸이 사용자가 입력한 명령이나 파일을 찾을 때 검색하는경로PS1,PS2셸이 사용하는 기본 프롬프트 와 두번째 프롬프트MAIL사용자의 편지가 저장된 파일의 이름을 명시MAILCHECK셸 편지가 도착하였는지를 검사하는 시간을 설정MAILPATH편지가 저장되는 경로 설정SHELL사용자 환경에서 현재 사용하고 있는 셸을 명시TERM터미널 종류를 설정TERMCAP터미널 종류에 대한 정보를 포함TERMINTO터미널 종류에대한 정보를 포함 하고 있는 디렉토리를 명시TZ시간대( TIME ZONE) 을 정의1.7 SET 명령셸스크립트를 디버깅 하는 좋은 방법으 재실행$ fc –e – pw #pw 로 시작하는 명령어를 찾아 실행시킨다.$r #바로 이전 명령 실행$r 72 #72번째 실행된 명령 재실행에디터로 불러들여서 수정한 후에 재실행 할수 있는 방법$echo $FCEDIT #기본 설정 편집기/bin/ed$whence vi #해당 명령어 위치 확인/bin/vi$FCEDIT=”/bin/vi” #vi 편집기로 변경$fc 88 #88번 명령어를 편집기로 불러 들이고 수정하고 실행한다.$fc 82 88 #82번부터 88번까지 명령어를 편집기로 불러 들이고 실행----------------------------------------------------* fc 의 옵션들옵션의미l명령어를 실행하지 않고 단지 표시만 함r선택된 명령어를 역순으로 표시n명령어 번호 생성 금지2.4 내장 편집기 사용(“Korn” 셸에만 있음)“vi”, “gmacs”, “emacs”2.5 연산식산술연산을 위한 “expr” 보다 저진보한 “let” 명령어*표현식에 공백이나 텝을 사용할수 없고 let 에서는 $를 사용할수없다.$let x=y*2 #공백이나 $를 사용할수 없고 왼쪽에서 오른쪽으로 결합연산자의미-음수!부정*,/,%곱하기 나누기 나머지 연산자+, -덧셈 뺄셈=,비교 연산자==, !=등호 연산자=대입 연산자Korn 셸에서는 메타문자의 특성을 제거하기위해 “(( ))”과 같은 형식을 사용한다.틸드(~)라는 특수문자 사용하여 특정한 디렉토리를 표시틸더 문자의미~$HOME~userUser 의 홈디렉토리 표시~pathname$HOME/pathname 표시~+$PWD (현재 작업디렉토리)~-$OLDPWD (이전 작업디렉토리)$echo ~+ #현재 작업디렉토리를 보여준다.2.6 메뉴생성 (select)select sel in “date” “working” “quit” #1)date 2)working 3) quit 자동 메뉴생성docase $sel in“date”);;“working”);;esacdone----------------------------------------------------------------set 명령어--------------------------------------------------------------------test 명령어 “Bourne”셸에서의 추가적인 기능------------------------------------------------------------------test 명령어를 사용하지 않고 “[[ ]]”를 사용한다.연산자의미-L 파일명파일명이 기호식 링크이면 참을 반환파일1 –ne 파일2파일1이 파일2 보다 더 새로운것이면 참을 반환파일1 –ot 파일2파일 1이 파일2보다 더오래된것이면 참을 반환파일1 –et 파일 2파일1일 파일2 와 같으면 참을 반환“read”명령은 “Bourne”셸의 기능과 기본적으로 같지만 “?”를 사용하여 매개변수 일부분의로 사용 할수 있다read “name?your name :” #your name:_ 향상된 “read”명령어---------------------------------------------------------“trap” 명령어 P282--------------------------------------------------------2.9 개선된 기능들$pwd|& #백그라운드 실행--------------------------------------------------------$를이요한 명령어 결과값 치환$echo “total of file is $(ls |wc –l)” #$를 이용하여 명령어 결과 값을 치환할수도 있다.*변수 생성 및 접근방법형식의미${#name}Name 의 길이를 반환${#name[*]}배열 name 에 있는 원소들의 수를 반환${name:+word}Name 으 상태에 따라 출력값을 다르게 반환${name:=word}${name:?word}${name#형식}Name 앞에 나오는 형식을 제거${name##형식}${name%형식}Name 뒤에 나오는 형식을 제거${name%%형식}“Korn” 셸” 주위에 공백은 고려하지 않음%set name=one two # 첫번째 단어만 인식%set name=”one two” #인용 부호를 사용하면 둘다 인식%set myname=”one two”%echo “$myname” # 공백인식 출력%set myname=”?kug” #특수문자 표현시%echo “$myname” # “ “ 표시로 출력 해야 특수문자를 출력함.C 셸의 변수접근 기능 추가변수의미${변수명}변수명 값으로 대치${?변수명}변수명이 설정되어 있으면 “1” 그렇지 않으면 “0” 을 반환%set name={kang king kim} #변수에 문자열 배열 할당문자열 배열 접근 하는 방법-$변수명[인덱스], $변수명[인덱스 범위], ${변수명[인덱스]}, ${변수명[인덱스 범위]}-$#변수명, ${#변수명}배열안에 있는 원소의 값을 변경하려면 배열의 인덱스를 사용한다.기존 문자열 배열끝에 원소 추가set name=($name kug4) #name 배열에 kug4 추가------------------------------------------------------수치변수는 “@” 를 사용하여 선언 된다.set value=(100 200 300)표준입력% set yourname=$< #표준입력 $< “korn 셸의 read 명령어와 같음% echo $yourname[*]2.3 환경변수$argv 매개변수를 순서적으로 저장$cwd 현재 작업 디렉토리$status 본셸의 $? 와 같다 명령어가 정상적으로 종료하면 “0” 의 값을 그렇지 않으면 1의 값을 가진다.$history 히스토리 파일 크기 제어$$ 는 현재 실행중인 제일 마지막 프로세서 식별번호를 갖는다.% 명령어 & #& 는 백그라운드 작업 실행% kill 프로세스식별번호 #강제 종료2.4 별명(alias)$alias dir #해당 별명이 수행될 명령을 표시$alias ddir ls –a #새로운 별명 설정$ls –al #별명이 아닌 원래 명령어 ls 실행.cshrc 나 .login 파일에 별명을 지정할수 있록한다.