스터디/UNIX

셸 스크립트

elenalee 2023. 11. 14. 09:31

1. 셸이란 

▷ 명령어 해석기

사용자에 인터페이스 제공, 명령어에 상응하는 프로그램 실행 및 스크린 출력

▷ 스크립트 언어, 프로그래밍 언어

함수, 변수등의 프로그래밍 요소를 사용할 수 있음

반복문, 조건문등의 제어구조를 사용할 수 있음

셸 스크립트 프로그램에 있는 명령행을 제어구조에 따라 해석하고 실행

파일(셀 스크립트)에 명령을 저장하여 자동, 반복 실행가능 (배치파일 형태)

 

(1) 셸의 종류

Bash셸(리눅스 배포판의 기본셸), Csh/Tcsh셸, Ksh셸, Zsh셸, Fish셸

텍스트 모드 또는 GUI(gnome 데스크탑)환경에서 터미널을 띄우고 셸 명령을 실행

 

(2) 셸스크립트

셸 명령어의 집합으로 이루어진 실행 가능한 프로그램(텍스트 파일)

셸이 스크립트 파일의 내용을 읽어 처리함

선택/반복등의 프로그래밍 구조를 사용할수 있음

셸에서 사용할수 있는 모든 기능을 포함(함수/변수선언, 파이프, 입출력 리다이렉트)

긴작업, 반복적으로 일어나는 작업을 셸 스크립트로 작성 

셸 스크립트를 새로운 하나의 명령어처럼 사용가능 

ex) /etc/profile, /etc/bashrc, ~/bash_profile, ~/.baxhrc등의 셸 초기화 스크립트

 

(3) 셸스크립트 실행방법 

bash script_file

bash 명령을 사용, 스크립트 파일에 실행권한을 추가할 필요없음 

명령행에서 script_file 다음에 인수를 추가할수 있음 

서브셸을 새로 생성하여 스크립트를 실행함 

./script_file

스크립트 파일의 이름을 명령어처럼 사용, 스크립트 파일에 실행권한을 추가

PATH환경변수 설정 디렉터리의 스크립트 파일을 내 첫행 #! 다음에 해석기(/bin/bash)를 지정

서브셸을 새로 생성하여 스크립트를 실행함

source script_file 또는 .script_file 

source는 쉘의 내장 명령, 현재 사용중인 셸 환경에서 스크립트 파일을 실행함

(함수등이 자식셸에서 운영되면 메인에 영향을 주지못하므로 이에 대응하기 ㅟ함 

source명령대신에 도트(.)명령가능

 

(4) 셸스크립트 문법

#이후 (같은 행에서)나오는 내용은 주석으로 처리됨 

$0은 스크립트 파일의 이름으로 확장(source 명령으로 실행하면 셸이름(bash)로 확장))

$1은 첫번째 인수, $2는 두번째 인수로 확장 

스크립트 복잡하면 중간에 적절히 echo명령을 넣는 것이 좋음 (echo로 적절한 출력)

변수 = 값으로 변수에 값을 지정하고, $변수로 값을 추출 (등호(=)좌우에 공백불가)

참고 : bash -x script_file (실행전에 명령자체가 화면에 출력)

 

셸 스크립트 입력

 

 

 

2. 변수의 사용

(1) 셸스크립트에서 변수의 사용 

선언없이 변수를 사용할수 있음 

변수에 값을 지정 : 변수이름=값(공백안됨) ex) MYCOLOR=blue

변수확장 : $변수(변수의 값을 추출) ex)echo $PATH

변수의 값은 기본적으로 문자열로 취급됨

연산이 필요, 변환이 가능한 경우 정수로 다룸 ( $a=3, $b=4, 연산시 [], $echo $[$a+ $b] )

변수의 이름: 대소문자 구별, 영문자/숫자/언더스코어문자로 구성, 첫글자 숫자불가

 

(2) 명령 행 인수

셸이 스크립트를 처리할 때 사용되는 인수 ( 스크립트 실행에 필요한 입력값이 있을수 있음)

$0은 스크립트 파일의 이름으로 확장되며, 나머지는 위치매개변수(positional parameters)로서

$1, $2, $3등의 인수

 

(3) 특별한 매개변수

명령 행 인수와 관계가 있는 특별한 변수

변수의 값을 참조만 할수 있음

 

(4) read 명령

키보드로부터 한 라인을 읽은 후, 개별 단어를 상응하는 변수에 저장함  (입력)

대화식으로 스크립트를 실행시킬수 있음

read [options][variable..]

첫번째 변수에 첫번째 단어를, 두번째 변수에 두번째 단어를 저장 

변수 개수가 적으면, 마지막 변수에 나머지 모두를 저장, 남는 변수는 빈 문자열

변수의 이름을 사용하지 않으면 셸변수인 REPLY변수에 저장됨

옵션 -p prompt는 입력을 위한 프롬프트를 지정함 (안내 메시지 출력하고 사용자 입력대기 )

 

3. 함수

(1) 함수

셸스크립트에서 반복적으로 사용되는 명령의 묶음

셸 스크립트에서 함수를 정의 (정의되어 있는 함수는 호출하여 사용)

셸에서 함수호출시, 호출한 셸 내에서 실행

 

(2) 함수호출방법

함수가 정의된 셸 스크립트내에서 함수를 호출하여 사용할수 있음

source명령이나 도트(.)명령으로 함수가 정의된 셸 스크립트를 실행 시

셸 환경에 함수정의가 추가되어, 같은 셸에서 함수이름을 셸 명령어처럼 사용

- set 명령으로 함수정의를 확인하고, unset name으로 삭제할수 있음

- 함수가 정의되면 함수를 셸 명령어처럼 사용가능 ( 서브셸에서 수행해도 메인에서도 사용가능)

 

 

(3) 함수정의방법

 

return 또는 return n문은 함수를 종료하는 문장으로 종료상탯값을 반환할수 있음

(n 생략시 직전명령의 종료상탯값을 반환)

함수 정의를 항상 사용하려면 .bashrc에 넣는 것이 좋음 

(alias설정도 동일, 셸이 시작될때 항상 .~/.bashrc가 실행되기 때문)

함수 실행의 예

 

함수도 alias처럼 사용

 

 

4. 선택구조 

(1) 셸의 제어구조 

셸 스크립트에서 실행을 제어 ( 선택구조과 반복구조 )

if, for, case, while, until명령

 

(2) if명령 (프로그래밍에서 if문의 기능을 수행하는 복합명령)

if command.. then command...

   [eif command..; then 

          command... ]...

   [else command...]

      fi

 

세미콜론은 (;) 같은 라인에서 다른 단어 (else, elif, else, fi등)와 구분이 필요할때 사용 

if 다음명령의 실행하여 참이면 then다음 명령을 실행(if종료) 

- if나 elif다음에 조건검사를 위한 test명령가능

- if나 elif다음에 여러 명령이 나오면 마지막 명령의 종료 상탯값으로 참과 거짓을 구분함

- 종료 상탯값 0은 성공적 종료를 의미하며 참으로 간주 

거짓이면 elif 다음의 명령을 실행하여 참/거짓을 판단하고 실행

만족되는 것이 없으면 else다음의 명령을 실행 ($? 명령으로 직전 명령의 실행상태)

 

 

 

(3) test명령

조건 검사를 위해 사용하는 명령 조건이 만족되면 종료상탯값으로 0(참), 1(거짓)을 반환

test expression 또는 [expression]

expression은 파일의 상태검사, 문자열의 비교, 정수비교를 위한 조건 수식 

대괄호와 expression사이에 공백필수 

 

 

 

 

(4) case 명령

다중선택을 지원하는 복합명령 (java언어의 switch문과 의미유사)

case word in [pattern [ | pattern ]...) command ,,, ;;]... //패턴명령어 끝내는 )

esac

 

word부분을 먼저 확장하고, pattern과 매칭되는지 검사함

매칭이 이루어지면 상응하는 명령수행, 매칭이 이루어지면 이후 매칭시도없음

pattern에서는 *는 프로그램 언어에서 default키워드와 유사

 

5. 반복구조 

(1) for 명령 (1)

모든 데이터를 한 차례씩 처리하는 제어구조

for variabke [in word..]; do

  command.. 

done 

 

word... 부분(값의 목록)을 먼저 확장

word...에 존재하는 값을 순차적으로 변수 variable에 대입하고 do와 done사이의 명령수행

word부분이 없다면 in "$@"가 있는 것으로 가정 ( for var in "$@" )

 

(2) for 명령 (2)

C나 Java프로그래밍에서 사용하는 형태

for (( exp1; exp2; exp3)); do

  command.. 

done 

 

exp1 ~ exp3는 수식으로서 생략가능 

exp1은 제어변수 초기화(한번만 수행), exp2가 참인 동안 "명령과 exp3"반복수행

 

 

 

(3) while 명령 

조건이 참인 동안 명령을 반복수행

while command...; do

  command.. 

done 

 

while다음에 나오는 명령을 실행하여 참/거짓을 판단(if처럼 종료상탯값이 0이면 참으로 판단)

조건비교를 위해 while다음에 test expression 또는 [ expression ]을 자주 사용

 

for 명령과 while 명령 

C언어 형식의 for명령을 다음과 같이 변환가능

((exp1))

  while ((exp2)); do 

     command...

     ((exp3))

done 

 

((expression))은 수식계산에 사용되는 복합 명령

let "expression"과 동일하며 test명령 대신에 사용가능

조건비교를 위해 test expression  또는 [ expression ]와 함께 자주 사용
while다음의 ((expression))에서 수식계산의 경우 결과가 0이 아닌경우,

종료상탯값 0으로 참으로 판단

 

 

 

(4) Until 명령 

조건이 만족될때까지 (거짓인 동안) 명령을 반복수행

until command...; do

  command.. 

done 

 

until다음에 나오는 명령이 참이 될때까지 반복(즉, 거짓인 동안에 반복)

조건비교를 위해 test expression, [ expression ] 또는 ((expression))을 사용 

 

'스터디 > UNIX' 카테고리의 다른 글

GIT  (0) 2023.11.16
소프트웨어 관리  (0) 2023.11.13
Linux 관리자  (1) 2023.10.10
Linux 구동 및 사용자관리  (1) 2023.10.08
File and Directory  (0) 2023.10.05