240 likes | 406 Views
Shell Script Seminar 1999 Spring, SPARCS. by 유제성 (ari@sparcs.kaist.ac.kr). - Contents -. 1. What's a Shell ? 2. What's a Shell Script ? 3. Why we use a shell script ? 4. Bash and Shell script 5. Tcsh and Shell script 6. Environment variables. 1. What's a Shell ?. - 커널과 유저 사이의 인터페이스
E N D
Shell Script Seminar 1999 Spring, SPARCS by 유제성(ari@sparcs.kaist.ac.kr)
- Contents - 1. What's a Shell ? 2. What's a Shell Script ? 3. Why we use a shell script ? 4. Bash and Shell script 5. Tcsh and Shell script 6. Environment variables
1. What's a Shell ? - 커널과 유저 사이의 인터페이스 - GUI - 그래픽 유저 인터페이스 - 커널 - 하드웨어와의 인터페이스 - 커널보다 쉘의 종류가 다양하다 - Windows도 기본으로 제공되는 explorer외의 쉘로 바꿀 수 있으며, 커널이 동일하기 때문에 쉘이 바뀌더라도 인터페이스 외의 변화는 없다.
2. What's a Shell script ? - MS-DOS 의 배치파일(Batch File)과 비슷하다. - 명령어들의 모음 ( + 간단한 구조화 프로그래밍) - 쉘 스크립트는 쉘에서 제공하는 것이기 때문에, 쉘에 따라 문법과 제공되는 기능이 많이 다르다. - #으로 시작되는 줄은 주석이다 (첫째줄의 #!/bin/bash 등 제외)
3. Why we use a shell script ? - 반복되는 작업을 쉽게 하기 위해서 - 각자 고유한 쉘 환경을 꾸미기 위해서 - 환경파일 - .tcshrc .bashrc .muttrc .vimrc .xsession - 쉘 스크립트의 기능은 상당히 강력하다.
4. Bash and Shell script - 배쉬는 FSF(GNU)에서 유닉스의 Bourne Shell을 본따서 만든 쉘로서 Bourne Again Shell의 약자이다. - 배쉬는 본쉘을 모두 포함하며, C 쉘의 기능도 많이 포함한다. - 대부분의 리눅스 머신의 표준 명령어 라인 인터페 이스이다. - .bashrc 파일 내에 bash의 설정이 들어 있으며, 프롬 프트 상에서 set과 env로 자신의 현재 환경을 확인 할 수 있다.
4.1 How to make and run Shell script ? - #!/bin/bash를 VI등을 이용해서 스크립트의 첫째줄에 넣는다. - sparcs> bash filename - 계정에서 위와 같은 형식으로 실행시킨다. - 실행 퍼미션 (rwx에서 x)이 있을 필요가 없다. 쉘 스크립트는 스크립트 자체가 실행 파일이 아니고, 쉘을 통해서 실행되는 것이다. - 실행 퍼미션이 있을 경우 sparcs>filename 만으로도 실행된다. - 쉘 스크립트 내의 명령어들은 쉘 프롬프트 상에서도 실행된다. (for, if 같은 것들은 제외..) - sparcs> source test 와 같은 형식으로도 실행시킬 수 있다.
4.2 Variable - sparcs> var1=ABCDE sparcs> echo $var1 ( = echo "$var1") ABCDE - sparcs> var1=* (현재 디렉토리의 모든 파일들..) sparcs> echo $var1 Mail News documents public_html test1 test2 test3 sparcs> echo "$var1" * - sparcs> var1=t* (t로 시작되는 모든 파일들..) sparcs> echo $var1 test1 test2 test3
4.3 If-then - if [ 조건 ] then 참일 때 할 일 fi - if [ 조건 ] then 참일 때 할 일 else 거짓일 때 할 일 fi - if [ 조건1 ] then 조건1이 참일 때 할 일 elif [ 조건2 ] then 조건2가 참일 때 할 일 fi
4.4 For, while - for I in 1 2 3 4 5 6 7 8 9 10 do echo $I done - while [ 조건 ] do 할 일 done
5. Tcsh and Shell script - Tcsh는 Berkeley UNIX C Shell(csh)과 완벽하게 호환되며, 커맨드 라인 편집과 completion이 추가된 쉘이다. - 본쉘 스크립트를 C쉘에서 실행할 수는 있지만, C쉘 스크립트를 본쉘에서 실행할 수는 없다. (본쉘이 표준적) - #!/bin/tcsh롤 파일의 첫째줄에 추가하고, 프롬프트 상에서 tcsh filename으로 실행한다.
5.1 Variable - sparcs> set var1=ABCDE (set을 붙이는 것에 주의 !) sparcs> echo $var1 12345 - sparcs> set var1=(ABC, DEF, GHI) sparcs> echo $var[3] GHI sparcs> echo $var[2-3] DEF GHI - sparcs> @ a = 12345 (숫자변수는 앞에 @를 붙인다. sparcs> echo $a @와 변수명 사이에 한칸을 띈다) 12345
5.2 Operator & Calculation - c와 같은 문법으로 연산을 할 수 있다. - sparcs> @ a = 5 sparcs> @ b = 3 sparcs> @ c=$a % $b (%는 c에서 나머지 연산이다) 2 - 이 외에도 +, -, *, /, >>, <<, +=, ++, -=, --, *=, /=, %= 등도 C 문법으로 쓸 수 있다.
5.3 Foreach, while - test파일 #!/bin/tcsh foreach X ( ABC DEF GHI JKL MNO ) echo $X end - sparcs> tcsh test - while ( 조건 ) 할 일 end
5.4 If-then - if 구문도 C와 동일하게 쓰인다. - if ( case ) do something - ex) if ( $?a==1 || $?b==1 ) echo ABCDE
6. Environment Variables - 환경변수에는 path, prompt, alias, complete 등등이 있다 - 환경의 셋팅에 따라서 쉘 사용의 편리함에 많은 차이가 나게 된다. 6.1 History - 본쉘에는 없는 C쉘만의 기능이다. 그러나, 배쉬에는 포함되어 있다.
6.1.1 History of bash - sparcs> set HISTFILE=/home98/ari/.bash_history HISTFILESIZE=500 HISTSIZE=500 - 히스토리 파일이 .bash_history이고 파일 사이즈가 500, 메모리의 히스토리 사이즈도 500으로 셋팅되어 있음을 나타낸다. 6.1.2 History of tcsh - sparcs> set history 100 - 히스토리 사이즈가 100임을 나타낸다
6.1.3 Usage of History - sparcs> !! 라고 하면, 바로 전에 실행했던 명령을 다시 실행 - sparcs> !10 이라고 하면, history에 기억된 명령어들 중에서 10번째 명령을 실행한다. - sparcs> !-10이라고 하면, 10번째 전에 입력했던 명령을 실행 - sparcs> !a 라고 하면 a로 시작하는 가장 최근의 명령을 실행
6.2 Alias - alias ls 'ls -p --color=tty $1 -F' - sparcs> ls 라고 치면 이것이 ls -p --color=tty -F로 치환된다. - sparcs> ls -la 는 ls -p --color=tty -la -F로 치환된다. - 현재의 alias 상태는 프롬프트에서 alias를 입력함으로써 알 수 있다.
6.3 Complete - Completence란 프롬프트 상에서 tab을 눌렀을 때, 현재 입력된 문자열로 시작되는 것들을 완성해주는 기능이다. (tab외에 ^D 도 가능하다) - List 기능은 조건에 맞는 것들이 여러개일 때, 출력해주는 것이 다. 이 기능은 set autolist가 되어 있을 때만 쓸 수 있다. - sparcs> cd [tab] Mail/ News/ digital/ documents/ public_html/ sparcs> cd - sparcs> cd d[tab] digital/ documents/ sparcs> cd d - sparcs> talk [tab] ari bxxxxxx gxxxxxxx ixxxx vxxx sparcs> talk
- sparcs> talk ar[tab] (줄이 바뀌지 않는다) sparcs> talk ari - 맞는 것이 하나일 때는 리스트되지 않고 Complete 된다. - sparcs> a[tab]을 하면 현재 지정된 path내의 a로 시작되는 모든 파일들이 출력된다. - sparcs> man [tab]을 하면 명령어들의 목록이 나온다. - sparcs> finger [tab]을 하면 사용자들의 목록이 나온다. - 현재 설정된 complete들을 보려면 프롬프트에서 complete를 입력한다. - set fignore=(.bak .xxx)와 같이 되어 있을 경우, .bak 이나 .xxx로 끝나는 파일들은 complete list에서 나타나지 않는다. - .tcshrc파일 내에 complete들이 설정되어 있다. 예) complete cd p/1/d/ complete man p/1/c/
- complete 의 형식은 complete 명령어 옵션1/패턴/옵션2/문자열 - 옵션1은 c, C, n, N, p가 올 수 있으며 옵션1은 패턴을 이용하는 경우를 나타낸다. - 옵션2는 a, c, d, f, s, u 등이 있으며, a는 alias, c는 command, d는 directory, f는 파일, s는 set, u는 user를 의미한다. - 문자열은 없어도 되며, 패턴에 맞는 단어가 1개일 때, 즉 complete 가 될 때 뒤에 추가할 문자열을 의미한다. - complete set 'c/*=/f/' 'p/1/s/=' 'n/=/f' 등과 같이 한 명령에 대해서도 패턴에 따라 다르게 complete 시킬수 있다. - 옵션 1의 c와 n의 차이는 c는 커서와 붙어있는 단어, n은 공백을 사이로 떨어진 앞의 단어를 의미한다.
- 옵션 1의 p는 position을 의미하는 것으로, 1은 [tab]을 누른 위치가 공백을 기준으로 첫번째여야함을 말한다. p/*/... 과 같이 쓰일 경우는, 위치에 관계없이 쓰인다는 의미이다. 특별한 패턴 조건이 필요없을 때 이렇게 쓴다. - sparcs> set [tab]을 하면 p/1/s/=에 해당하는 complete가 실행 - sparcs> set arg[tab]을 해도 역시 p/1/s/=이 실행되며, set중에서 arg로 시작되는 것은 argv 하나 뿐이다. 따라서 뒤에 =이 추가. sparcs> set argv= - sparcs> set a=[tab]을 하면, c/*=/f/에 해당하는 complete가 실행 - sparcs> set a= i[tab]을 하면, n/=/f/에 해당하는 complete가 실행
6.4 Prompt - set prompt = "%m %#" 과 같은 형식으로 쓰인다. - prompt의 ""안에 들어올 수 있는 변수들은 다음과 같다. - %/, %~ : 현재 디렉토리. %~는 home98/ari를 ~로 치환한다. - %h, %! : History 번호 - %M, %m : 호스트 이름 %m은 맨 앞의 . 까지만을 나타낸다. - %% : % 기호 - %t, %T, %@, %p, %P : 현재 시간 (각각 차이가 있다) - %n : 사용자 이름 - %d, %D, %y, %Y, %w, %W : 요일, 년, 월, - %# : >기호