쉘 (Shell) 환경 운영체제실습
목차 Ⅴ. 쉘 (shell) 환경 5.1 쉘 (shell) 이란? 5.2 쉘 (shell) 기능 5.3 쉘 (shell) 변수 5.4 기타기능 5.5 쉘 (shell) 프로그래밍
5.1 쉘 (shell) 이란? 쉘 (Shell) 사용자가입력한명령어를해석해주는명령어해석기 (Command interpreter) 사용자와운영체제 (OS) 사이에인터페이스 (interface) 역할 쉘프롬프트 - 쉘 (shell) 이사용자가명령어를입력해주길기다리며, 명령어를받을준비가되어있음을알림 (ex: #, $, %) 명령어입력 명령어해석
5.1 쉘 (shell) 이란? 쉘 (Shell) 종류 본쉘 (bourne shell-sh) - AT&T사의벨 (bell) 연구소에서 Steven Bourne이개발한시스템 V의 shell - 쉘프롬프트 : $ - 가장오랫동안표준구성요소로서사용 - 강력한명령프로그래밍언어기능 C 쉘 (C shell - csh) - 캘리포니아대학의빌조익이개발한 4.3BSD의 shell - 쉘프롬프트 : % - C언어와유사한언어사용 본어게인쉘 (bourne-again shell bash) - GNU 프로젝트를위해브라이언폭스 (Brian Fox) 가개발한 shell - 쉘프롬프트 : $ - bourne 쉘과대부분호환 - ksh, csh 에서제공하는기능들추가 ( 히스토리, 별명, 연산기능, job control, 명령어나파일이름자동완성기능등 ) - 대화형에적합 콘쉘 (Korn shell ksh) - AT&T사의벨 (bell) 연구소에서 Dave Korn이 bourne shell, Korn shell의장점 + 새로운기능추가하여개발한 shell - 쉘프롬프트 : $ - 보편적으로사용하지않음
5.2 쉘 (shell) 기능 쉘 (Shell) 의기능 내 / 외부명령어해석기 다중프로세스관리 여러명령연결 ( 파이프 ) 입 / 출력리다이렉션 특수문자해석및치환 명령어치환 지역변수 / 환경변수관리 스크립트프로그래밍언어
5.2 쉘 (shell) 기능 현재사용가능한 shell 정보 - #cat /etc/shells 쉘 (Shell) 선택 현재사용중인 shell -#echo $SHELL 로그인쉘 (login shell) 정보 - #cat /etc/passwd - 7 번째필드 참고 : echo 명령어 - 문자열이나변수의값을화면에출력시키는명령어 - #echo 출력할문자열 - #echo $ 변수명 프롬프트정보출력
5.2 쉘 (shell) 기능 쉘 (Shell) 해석과정 명령어입력 shell이명령어해석 ( 명령어행중에 $ 변수가있으면, 찾아서변수의값으로대체 ) 더이상해석할것이없다면, 자식프로세스 (child shell) 을복제하여생성 자식 shell은해당명령어를실행 ( 현재 shell은자식shell이명령어를종료할때까지기다림 ) 예 ) #echo $SHELL Yes( 유 ) Shell 프롬프트 (#, $, %) 명령어입력 ( #echo $SHELL ) 명령어해석 ( #echo $SHELL ) 환경변수 유무 No( 무 ) 자식 프로세스생성 No( 무 ) 백그라운드실행유무 대기 Yes( 유 ) $ 변수명을 변수값으로대체 ( #echo /bin/bash ) 명령어수행 (/bin/bash 출력 )
5.2 쉘 (shell) 기능 메타문자 (Meta Characters) Shell 이특수한의미로받아들이고, 해석을시도하는문자 (shell 이문자그대로의의미로받아들이지않음 ) 메타문자가나올때마다, 항상실행전에 shell 이먼저해석 메타문자 : $ -$ 단어 - $ 뒤에나오는단어를변수이름으로생각하고, 변수값으로대체 -예)#echo $SHELL 해석금지메타문자 : \, backslash - shell이 \ 문자를만나면, 그다음문자가메타문자이든아니든, 상관하지않고해석을하지않음 - 예 ) echo \$SHELL
5.2 쉘 (shell) 기능 메타문자 (Meta Characters) 문자열해석금지메타문자 :, - 공백문자 : 명령어와옵션등을구별하는기본구분자 (delimeter) - 공백문자를포함하는문자열에대하여공백문자해석방지 큰따옴표 - 공백이포함된문자열그대로출력 작은따옴표 - 공백이포함된문자열그대로출력 - 문자열속에변수에대하여대체기능금지 - 예 ) #echo My shell is $SHELL // My< 공백 >< 공백 >shell 예 ) #echo My\ \ shell is $SHELL // My\< 공백 >\< 공백 >shell 예 ) #echo My shell is $SHELL // My< 공백 >< 공백 >shell 예 ) #echo My shell is $SHELL // $SHELL을해석하지않음
5.2 쉘 (shell) 기능 파이프 ( pipe, ) 동시에실행되는프로그램간에 data 를전달하는통로를만드는것 명령어1 명령어2 - [ 명령어1] 의실행결과가, [ 명령어2] 의표준입력으로연결됨 - 예 ) cat /etc/passwd grep pyo - 예 ) ls /bin more - 예 ) cat /root/anaconda-kr.cfg wc ( 참고 ) wc명령어 - # wc [ 옵션 ] 파일명 - 파일을분석하여, 총행수, 단어수, 바이트수출력 -옵션 ( -l : 행수만출력 / -w : 단어수만출력 / -c : 바이트수만출력 )
5.2 쉘 (shell) 기능 리다이렉션 (Redirection, <, >, ) 표준입력 (stdin) - 일반적으로, 키보드입력 표준출력 (stdout) - 모니터 - 정상적인처리결과를모니터를통해출력 표준에러 (stderr) - 모니터 - 에러결과를모니터를통해출력 ( 버퍼링하지않고바로출력 ) 표준출력리다이렉션 ( >, >>) - 오른쪽의결과를왼쪽방향으로출력 - 보통외쪽의실행결과를오른쪽의파일로저장할때사용 - 예 ) #ls l /usr/bin > bin-list.txt - 예 ) #ls /dev >> bin-list.txt
5.2 쉘 (shell) 기능 리다이렉션 (Redirection, <, >, ) 표준입력리다이렉션 (<) - 오른쪽의내용을왼쪽방향으로출력 - 예 ) cat < /etc/passwd 표준에러리다이렉션 (2>) - 왼쪽의실행결과에러가발생했을때, 에러결과를오른쪽방향으로출력 - 예 ) 명령어 > stdout.txt 2> stderr.txt - 예 ) 명령어 > stdall.txt 2>&1 // 출력과에러를 stdall.txt에저장 - 예 ) 명령어 > /dev/null 2> /dev/null // 출력과에러결과가필요하지않을때 // null장치 (/dev/null) 사용
5.2 쉘 (shell) 기능 명령관리 한줄에여러개의명령어 - 세크콜론 (;) 메타문자로명령어구분 - 예 ) 명령어1 ; 명령어2 ; 명령어3 && 메타문자 (AND) - 명령어1 && 명령어2 - 앞의 [ 명령어1] 이성공적으로수행되었을때만, [ 명령어2] 가실행됨 메타문자 (OR) - 명령어 1 명령어 2 - [ 명령어 1] 이실패한경우에만 [ 명령어 2] 실행
5.3 쉘 (shell) 변수 Shell 변수 쉘 (Shell) 변수 - 명령어실행, 사용자환경설정및 shell 프로그래밍을하기위한환경정보를저장 Shell 변수종류 지역변수 환경변수 변수 변수 변수전달 (X) 자식 shell 생성 변수전달 (O) X 변수
5.3 쉘 (shell) 변수 환경변수 쉘 (Shell) 변수
5.3 쉘 (shell) 변수 쉘 (Shell) 변수 지역변수설정 - 변수명 = 값 -예)#movie=X-man #movie= Notting Hill // 공백주의 변수값확인 - #echo $ 변수명 - 예 ) #echo $movie 변수삭제 - unset 변수명 - 예 ) #unset movie
5.3 쉘 (shell) 변수 쉘 (Shell) 변수 지역변수를환경변수로만들기 - #export 지역변수명 환경변수를지역변수로만들기 - #export n 환경변수
5.4 기타기능 별칭 (alias) Alias설정 - 긴명령어를간단한이름으로대체하여사용하는기능 - #alias 별칭 = 명령어 - 예 ) #alias ll= ls l Alias 삭제 - #unalias 삭제할별칭 - 예 ) #unalias ll
5.5 쉘프로그래밍 쉘스크립트작성 쉘프로그래밍 #!/bin/sh echo user name : $USERNAME echo home dir : $HOME exit 0 쉘스크립트실행 - #sh < 스크립트파일 > - 실행퍼미션추가후실행 #chmod u+x scriptfile.sh #./scriptfile.sh 기타 - 펄 (perl) - 파이썬 (python)