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가 실행되기 때문)
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 |