본문 바로가기

대학교 2학년 1학기/리눅스 프로그래밍

쉘 스크립트 프로그래밍 (1)

728x90

스크립트 프로그램의 실행

- 텍스트 파일로 작성

- 운영체제가 전용 인터프리터 프로세스를 실행

- 인터프리터 프로세스가 파일을 한 줄씩 읽어서 표현된 대로 실행

 

인터프리터의 실행

1. 인터프리터 직접 실행

2. 대상 프로그램을 명령어처럼 사용

- 대상 프로그램에 실행 가능 모드 추가 ex) chmod +x 파일

- 인터프리터 종류는 프로그램 속의 첫 줄에 지정 ex) #! /bin/bash

- OS 커널에서 대상 파일을 읽는데 텍스트 파일이면 첫 줄에 지정된 인터프리터를 메모리에 적재, 실행하면서 지정된 프로그램 파일명을 인수로 전달

 

쉘 스크립트 작성 및 실행

1. vi 편집기로 쉘 스크립트 파일 작성

2-1. Bash로 실행

- Bash로 실행할 때에는 실행가능 모드 여부와 상관없음 ex) bash hello

2-2. 명령어처럼 실행

- 작성된 파일을 실행가능 하도록 변경한 후 명령어처럼 실행

ex) chmod +x hello -> ./hello

- PATH 환경 변수에 hello 파일이 있는 디렉터리를 추가해 놓으면 “./” 없이 그냥 hello 명령으로 실행 가능 ex) export PATH=/home/stud2217/week9/test3

 

명령열

- ;을 이용하여 한 줄에 여러 명령들을 나열 ex) date; who; ps

Sub-shell

- 자식 셸을 생성하여 명령들을 처리 ex) (date; who; ps)

명령열과 Sub-shell의 비교

- date; who; ps > output1 과 (date; who; ps) > output2 의 차이는 output1에는 ps 명령의 결과만 저장되어 있고, output2에는 date부터 ps까지 차례대로 실행 된 결과가 저장되어 있다.

 

Meta Character 정리

>  : 표준 출력을 파일에 저장

>> : 표준 출력을 파일에 추가 저장

< : 표준 입력을 파일에서 읽기

<< 특정 문자 : 특정 문자로 지정한 내용이 들어올 때까지 명령을 실행

| : 앞 프로세스의 출력을 다음 프로세스의 입력으로 전달

; : Shell 명령어를 순서대로 구분하여 나열

& : background 실행

|| : 이전의 명령이 실패하면 실행하도록 하는 조건부 실행

&& : 이전의 명령이 성공하면 실행하도록 하는 조건부 실행

(…) : 명령어들을 하나의 그룹으로 처리

* : 0개 이상의 문자와 일치하는 파일들로 치환

? : 단일 문자와 일치하는 파일들을 치환

[...] : 대괄호 사이의 어떤 단일 문자와 일치하는 파일들로 치환

‘...’ : 따옴표 구간을 하나로 처리 (특수문자 처리 없음)

`command` or $(comand) // command의 출력에 의해서 대치

~ : 홈 디렉터리

$ : Shell 변수 값을 적용, $변수명 또는 ${변수명}

! : 히스토리 치환

\ : Shell의 메타문자 앞에 붙어서 메타문자의 특수 의미를 제거

“...” : 따옴표 구간을 하나로 처리 ($,`,\만 특수 문자 처리)

# : 주석 역할

 

종료 코드

1. Exit으로 지정된 종료 코드 값

- exit 0 <- 성공적으로 종료

- exit 2 <- 0이 아닌 값은 모두 실패로 인식

2. 지정된 종료 코드가 없으면 그 속의 마지막 실행 명령의 종료코드

 

표준 입력 읽기

- read: 한 줄의 내용씩 읽어 들이는 명령어

- 옵션 -p: 프롬프트 출력

 

미리 정의된 특수 용도의 변수들

$0 : shell script 이름

$1-$9 : 인수(파라미터) 1부터 9까지

$# : 인수 개수

$* : 인수 전체 (한 개의 문자열로 취급)

$@ : 인수 전체 (배열로 취급)

$? : 최근 실행한 명령의 종료 코드

$$ : 자신의 프로세스 번호

 

정수 연산의 여러 가지 표현 방법

1. (( name - expression )) // 권장

2. name =`expr expression` or name =$(expr expression) // 인용부호 안에서도 사용 가능

cf) 명령어와 수식 사이에 공백 조건문에서 조건을 표현하는 수식: ((expression)), 변수 값에서 $ 생략 가능

 

if

1. 표현 문법

if command

then

statements

fi

2. 의미

- Command 부분의 명령이 성공하면 (종료코드가 0이면), Statements 부분에 표현된 명령들을 실행

3. 들여쓰기는 안 해도 되지만 가독성이 좋게 구현

4. Command가 명령열이면 마지막 명령의 종료 코드 적용

 

if then elif 표현

if command1; then

statements1

elif command2; then

statements2

else

statements3

fi

 

WhileUntil

While: 조건이 true 이면 반복

while command

do

statements

done

Until: 조건이 false 이면 true가 될 때까지 반복

until command

do

statements

done

 

 

728x90