SlideShare a Scribd company logo
1 of 81
Download to read offline
Shell Part 2
http://rainbow.sunmoon.ac.kr/~yypark
http://ubilab.sunmoon.ac.kr
배시 쉘 프로그래밍
(기본)
3
쉘 스크립트
 명령어가 명령행에서가 아니라 파일 안에서 실행
될 때, 이 파일을 쉘 스크립트라 함
 대화형 기능으로 동작하지 않음
 BASH_ENV 환경변수에서 지정한 파일
(‘BASH_ENV 파일’)을 실행함 (.bashrc)
 이러한 BASH_ENV 파일을 읽어들인 후, 쉘은 스
크립트 안의 명령어들을 실행
4
쉘 스크립트 작성절차
 일반적으로 편집기에서 작성(vi, gedit 등)
 주석(‘#’ 기호)과 명령어로 구성
 첫 번째 행
 배시 쉘 프로그램
 유닉스 명령어, 본 쉘 명령어, 프로그램 구조, 주석 등으로 이루어
짐
#!/bin/bash
#!/bin/bash
#!/bin/bash
#!/bin/bash
:
:
:
: 항상
항상
항상
항상 스크립트의
스크립트의
스크립트의
스크립트의 첫
첫
첫
첫 행에
행에
행에
행에 나와야
나와야
나와야
나와야 함
함
함
함
:
:
:
: 스크립트를
스크립트를
스크립트를
스크립트를 수행할
수행할
수행할
수행할 때
때
때
때 사용할
사용할
사용할
사용할 쉘의
쉘의
쉘의
쉘의 이름을
이름을
이름을
이름을 지정
지정
지정
지정
:
:
:
: 기호
기호
기호
기호 ‘#!
#!
#!
#!’ 는
는
는
는 매직넘버라
매직넘버라
매직넘버라
매직넘버라 불림
불림
불림
불림.
.
.
. 커널이
커널이
커널이
커널이 실행
실행
실행
실행 프로그
프로그
프로그
프로그
램으로
램으로
램으로
램으로 인식해야
인식해야
인식해야
인식해야 하는지의
하는지의
하는지의
하는지의 여부를
여부를
여부를
여부를 나타냄
나타냄
나타냄
나타냄
5
쉘 스크립트 실행권한 부여
 파일 생성 후 적절한 권한이 주어져야 쉘 스크립
트 실행이 가능함
6
쉘 스크립트 수행 간단한예제
 스크립트 작성하기 (greetings)
7
쉘 스크립트 수행 간단한예제(Cont’d)
 스크립트 실행하기 (greetings)
8
내장명령어 ‘read’
 파일이나 터미널로부터 입력을 읽어오기 위함
 개행문자(n)가 나타날 때 까지 행을 읽어들임
 사용자가 엔터키를 입력할 때까지 프로그램을 일시 중지
시키는 목적으로도 사용함
입력에
입력에
입력에
입력에 역슬래시를
역슬래시를
역슬래시를
역슬래시를 쓸
쓸
쓸
쓸 수
수
수
수 있게
있게
있게
있게 허용함
허용함
허용함
허용함
read –r line
Prompt를
를
를
를 출력하고
출력하고
출력하고
출력하고 입력을
입력을
입력을
입력을 기다림
기다림
기다림
기다림. 입력내용은
입력내용은
입력내용은
입력내용은 REPLY변수에
변수에
변수에
변수에 저장
저장
저장
저장
read –p prompt
입력
입력
입력
입력 행에서
행에서
행에서
행에서 명령행
명령행
명령행
명령행 편집을
편집을
편집을
편집을 사용함
사용함
사용함
사용함 (명령행
명령행
명령행
명령행 편집기가
편집기가
편집기가
편집기가 vi라면
라면
라면
라면 입력행에서
입력행에서
입력행에서
입력행에서 vi 키를
키를
키를
키를
이용하여
이용하여
이용하여
이용하여 편집
편집
편집
편집 가능
가능
가능
가능)
read –e
입력받은
입력받은
입력받은
입력받은 단어
단어
단어
단어 목록을
목록을
목록을
목록을 arrayname이라는
이라는
이라는
이라는 배열에
배열에
배열에
배열에 저장
저장
저장
저장
read –a arrayname
저장할
저장할
저장할
저장할 특별한
특별한
특별한
특별한 이름이
이름이
이름이
이름이 없으면
없으면
없으면
없으면 read는
는
는
는 REPLY라는
라는
라는
라는 특수
특수
특수
특수 내장변수에
내장변수에
내장변수에
내장변수에 값을
값을
값을
값을 저장함
저장함
저장함
저장함
read
표준입력으로부터
표준입력으로부터
표준입력으로부터
표준입력으로부터 한
한
한
한 행을
행을
행을
행을 읽어서
읽어서
읽어서
읽어서 그중
그중
그중
그중 첫
첫
첫
첫 단어는
단어는
단어는
단어는 변수
변수
변수
변수 first에
에
에
에 저장하고
저장하고
저장하고
저장하고 나머지는
나머지는
나머지는
나머지는
last에
에
에
에 저장함
저장함
저장함
저장함
read first last
표준입력으로부터
표준입력으로부터
표준입력으로부터
표준입력으로부터 한
한
한
한 행을
행을
행을
행을 읽어서
읽어서
읽어서
읽어서 변수
변수
변수
변수 answer에
에
에
에 저장함
저장함
저장함
저장함
read answer
의미
의미
의미
의미
형식
형식
형식
형식
9
내장명령어 ‘read’ 예제
 스크립트 작성하기 (nosy)
10
내장명령어 ‘read’ 예제(Cont’d)
 스크립트 실행하기 (nosy)
11
산술연산(정수타입계산)
 ‘declare’ 명령어 (declare –i 사용)
# declare
# declare
# declare
# declare –i
i
i
i 명령어를
명령어를
명령어를
명령어를 사용하여
사용하여
사용하여
사용하여 num
num
num
num 변수를
변수를
변수를
변수를
정수
정수
정수
정수 타입으로
타입으로
타입으로
타입으로 선언
선언
선언
선언
#
#
#
# 문자열
문자열
문자열
문자열 hello
hello
hello
hello를
를
를
를 정수타입
정수타입
정수타입
정수타입 변수
변수
변수
변수 num
num
num
num에
에
에
에 대입하려고
대입하려고
대입하려고
대입하려고 하면
하면
하면
하면 대신
대신
대신
대신 0
0
0
0의
의
의
의 값이
값이
값이
값이 num
num
num
num 변수에
변수에
변수에
변수에 지정됨
지정됨
지정됨
지정됨
#
#
#
# 스페이스는
스페이스는
스페이스는
스페이스는 사용하지
사용하지
사용하지
사용하지 않거나
않거나
않거나
않거나 따옴표로
따옴표로
따옴표로
따옴표로 묶어야
묶어야
묶어야
묶어야 함
함
함
함
#
#
#
# 스페이스를
스페이스를
스페이스를
스페이스를 따옴표로
따옴표로
따옴표로
따옴표로 묶었으므로
묶었으므로
묶었으므로
묶었으므로 곱셈이
곱셈이
곱셈이
곱셈이 수행됨
수행됨
수행됨
수행됨
#
#
#
# 변수가
변수가
변수가
변수가 정수타입이므로
정수타입이므로
정수타입이므로
정수타입이므로 부동소수점을
부동소수점을
부동소수점을
부동소수점을 지정하면
지정하면
지정하면
지정하면 구문에러발생
구문에러발생
구문에러발생
구문에러발생
12
산술연산(정수타입계산)
 ‘let’ 명령어
# i
# i
# i
# i 변수에
변수에
변수에
변수에 5
5
5
5를
를
를
를 저장
저장
저장
저장
# let
# let
# let
# let명령어가
명령어가
명령어가
명령어가 i
i
i
i 변수에
변수에
변수에
변수에 1
1
1
1을
을
을
을 더함
더함
더함
더함.
.
.
. 산술연산에서는
산술연산에서는
산술연산에서는
산술연산에서는 변수
변수
변수
변수
치환을
치환을
치환을
치환을 위해
위해
위해
위해 ‘$
$
$
$’를
를
를
를 사용할
사용할
사용할
사용할 필요가
필요가
필요가
필요가 없음
없음
없음
없음
#
#
#
# 인자들에
인자들에
인자들에
인자들에 스페이스가
스페이스가
스페이스가
스페이스가 있으면
있으면
있으면
있으면 따옴표를
따옴표를
따옴표를
따옴표를 사용
사용
사용
사용
#
#
#
# 복합연산자
복합연산자
복합연산자
복합연산자 +=
+=
+=
+=를
를
를
를 사용하여
사용하여
사용하여
사용하여 i
i
i
i 변수에
변수에
변수에
변수에 1
1
1
1을
을
을
을 더함
더함
더함
더함
# let
# let
# let
# let명령어
명령어
명령어
명령어 대신
대신
대신
대신 (( ))
(( ))
(( ))
(( )) 명령어를
명령어를
명령어를
명령어를 사용할수
사용할수
사용할수
사용할수 있음
있음
있음
있음
13
산술연산(부동소수점타입계산)
 배시 쉘은 기본적으로 정수타입만 계산
 bc, awk 등의 유틸리티를 사용하여 복잡한 계산
수행
14
위치 인자
 스크립트 이름 다음에 공백 문자로 구분된 각 단어를 인자
라 부름
 명령행에서 스크립트에 필요한 정보를 넘겨줄 수 있음
 명령어 ‘set’을 써서 설정 또는 재설정할 수 있고 이때 이
전 설정 값은 지워짐
“$1” “$2” “$3”으로
으로
으로
으로 평가
평가
평가
평가
“$@”
“$1 $2 $3”으로
으로
으로
으로 평가
평가
평가
평가
“$*”
큰따옴표를
큰따옴표를
큰따옴표를
큰따옴표를 사용하였을
사용하였을
사용하였을
사용하였을 때를
때를
때를
때를 제외하고는
제외하고는
제외하고는
제외하고는 $*와
와
와
와 동일한
동일한
동일한
동일한 의미
의미
의미
의미
$@
모든
모든
모든
모든 위치
위치
위치
위치 인자를
인자를
인자를
인자를 평가
평가
평가
평가
$*
위치
위치
위치
위치 인자의
인자의
인자의
인자의 총
총
총
총 개수를
개수를
개수를
개수를 평가
평가
평가
평가
$#
10번
번
번
번 위치
위치
위치
위치 인자
인자
인자
인자
${10}
1번부터
번부터
번부터
번부터 9번까지의
번까지의
번까지의
번까지의 위치
위치
위치
위치 인자
인자
인자
인자
$1-$9
현재
현재
현재
현재 쉘
쉘
쉘
쉘 스크립트
스크립트
스크립트
스크립트 이름
이름
이름
이름
$0
의미
의미
의미
의미
위치인자
위치인자
위치인자
위치인자
15
위치 인자 예제
 스크립트 작성하기 (greetings2)
16
위치 인자 예제(cont’d)
 스크립트 실행하기 (greetings2)
17
‘set’ 명령어와 위치 인자 예제
 스크립트 작성하기 (args)
18
‘set’ 명령어와 위치 인자 예제(Cont’d)
 스크립트 실행하기 (args)
19
내장명령어 ‘test’
 표현식의 평가에 일반적으로 사용
#
#
#
# grep
grep
grep
grep명령어의
명령어의
명령어의
명령어의 종료상태가
종료상태가
종료상태가
종료상태가 성공적으로
성공적으로
성공적으로
성공적으로 수행했으므로
수행했으므로
수행했으므로
수행했으므로 0
0
0
0이
이
이
이 된다
된다
된다
된다
# test
# test
# test
# test명령어는
명령어는
명령어는
명령어는 문자열이나
문자열이나
문자열이나
문자열이나 숫자를
숫자를
숫자를
숫자를 평가하거나
평가하거나
평가하거나
평가하거나,
,
,
,
파일을
파일을
파일을
파일을 검사하기
검사하기
검사하기
검사하기 위해
위해
위해
위해 사용
사용
사용
사용. 0
. 0
. 0
. 0을
을
을
을 반환하면
반환하면
반환하면
반환하면 표현식을
표현식을
표현식을
표현식을
참으로
참으로
참으로
참으로 평가
평가
평가
평가, 1
, 1
, 1
, 1이면
이면
이면
이면 거짓임
거짓임
거짓임
거짓임.
.
.
. 등호
등호
등호
등호(=)
(=)
(=)
(=)기호
기호
기호
기호 좌우에는
좌우에는
좌우에는
좌우에는
스페이스
스페이스
스페이스
스페이스 삽입
삽입
삽입
삽입.
.
.
.
#
#
#
# 대괄호를
대괄호를
대괄호를
대괄호를 test
test
test
test명령어
명령어
명령어
명령어 대신
대신
대신
대신 사용할
사용할
사용할
사용할 수
수
수
수 있음
있음
있음
있음
# test
# test
# test
# test명령어에서는
명령어에서는
명령어에서는
명령어에서는 와일드카드를
와일드카드를
와일드카드를
와일드카드를 사용할
사용할
사용할
사용할 수
수
수
수 없음
없음
없음
없음
# $x
# $x
# $x
# $x가
가
가
가 $y
$y
$y
$y보다
보다
보다
보다 큰지
큰지
큰지
큰지(
(
(
(-
-
-
-gt
gt
gt
gt)
)
)
) 검사함
검사함
검사함
검사함. 0
. 0
. 0
. 0이면
이면
이면
이면 참
참
참
참, 1
, 1
, 1
, 1이면
이면
이면
이면 거짓
거짓
거짓
거짓
# $x
# $x
# $x
# $x가
가
가
가 $y
$y
$y
$y보다
보다
보다
보다 작거나
작거나
작거나
작거나 같은지
같은지
같은지
같은지(
(
(
(-
-
-
-le)
le)
le)
le) 검사함
검사함
검사함
검사함. 0
. 0
. 0
. 0이면
이면
이면
이면 참
참
참
참, 1
, 1
, 1
, 1이면
이면
이면
이면 거짓
거짓
거짓
거짓
20
‘if’ 명령어
 조건을 표현하기 위한 가장 간단한 형태
형식
형식
형식
형식
if
if
if
if 명령어
명령어
명령어
명령어
then
then
then
then
명령어
명령어
명령어
명령어
명령어
명령어
명령어
명령어
fi
fi
fi
fi
(
(
(
(숫자
숫자
숫자
숫자 및
및
및
및 문자열에
문자열에
문자열에
문자열에 대해
대해
대해
대해 test
test
test
test 사용
사용
사용
사용 – old)
old)
old)
old)
if
if
if
if test
test
test
test 조건식
조건식
조건식
조건식
then
then
then
then
명령어
명령어
명령어
명령어
fi
fi
fi
fi
(
(
(
(또는
또는
또는
또는)
)
)
)
if [
if [
if [
if [ 문자열
문자열
문자열
문자열/
/
/
/수식
수식
수식
수식 ] then
] then
] then
] then
명령어
명령어
명령어
명령어
fi
fi
fi
fi
형식
형식
형식
형식
(
(
(
(문자열에
문자열에
문자열에
문자열에 대해
대해
대해
대해 test
test
test
test 사용
사용
사용
사용 – new
new
new
new 형식
형식
형식
형식)
)
)
)
if [[
if [[
if [[
if [[ 문자열
문자열
문자열
문자열 조건식
조건식
조건식
조건식 ]] then
]] then
]] then
]] then
명령어
명령어
명령어
명령어
fi
fi
fi
fi
(
(
(
(숫자에
숫자에
숫자에
숫자에 대해
대해
대해
대해 let
let
let
let 사용
사용
사용
사용 – new
new
new
new 형식
형식
형식
형식)
)
)
)
if ((
if ((
if ((
if (( 수식
수식
수식
수식 ))
))
))
))
21
‘if’ 명령어 예제
#
#
#
# ‘grep
grep
grep
grep’ 명령어가
명령어가
명령어가
명령어가 /etc/
/etc/
/etc/
/etc/passwd
passwd
passwd
passwd 데이터베이스에서
데이터베이스에서
데이터베이스에서
데이터베이스에서 변수
변수
변수
변수
name
name
name
name을
을
을
을 찾는다
찾는다
찾는다
찾는다.
.
.
. 표준
표준
표준
표준 출력과
출력과
출력과
출력과 표준
표준
표준
표준 에러는
에러는
에러는
에러는 /dev/null
/dev/null
/dev/null
/dev/null로
로
로
로
리다이렉션
리다이렉션
리다이렉션
리다이렉션 됨
됨
됨
됨
#
#
#
# ‘grep
grep
grep
grep’ 명령어의
명령어의
명령어의
명령어의 종료
종료
종료
종료 상태가
상태가
상태가
상태가 0
0
0
0이면
이면
이면
이면, then
, then
, then
, then 에서부터
에서부터
에서부터
에서부터 fi
fi
fi
fi
를
를
를
를 만날
만날
만날
만날 때까지
때까지
때까지
때까지 나오는
나오는
나오는
나오는 문장들을
문장들을
문장들을
문장들을 실행한다
실행한다
실행한다
실행한다.
.
.
.
#
#
#
# fi
fi
fi
fi는
는
는
는 then
then
then
then다음에
다음에
다음에
다음에 나오는
나오는
나오는
나오는 명령어
명령어
명령어
명령어 목록의
목록의
목록의
목록의 끝을
끝을
끝을
끝을 의미한다
의미한다
의미한다
의미한다.
.
.
.
22
‘exit’ 명령어와 ‘?’ 변수
 ‘exit’명령어는 스크립트를 중지시키고 명령행으
로 돌아가고자 할 때 사용함
 특정 상황이 발생한 탓에 스크립트를 종료시켜야
할 경우 주로 사용
 인자는 0~255 사이의 숫자 사용 가능
 인자값 0 : 프로그램이 성공적인 수행을 마침
 0이외의 값 : 성공적인 수행의 실패를 의미
 ‘exit’ 명령어에 주어지는 인자는 쉘의 ‘?’ 변수에
저장됨
23
‘exit’ 명령어와 ‘?’ 변수 예제
 스크립트 작성하기 (bigfiles)
24
‘exit’ 명령어와 ‘?’ 변수 예제(Cont’d)
 스크립트 실행하기 (bigfiles)
25
‘if/else’ 명령어
 양자택일(two-way
decision making)을 표
현하는데 사용함
 ‘if’ 다음의 명령어가 거
짓으로 평가되면 ‘else’
다음의 명령어를 실행
함
형식
형식
형식
형식
if
if
if
if 명령어
명령어
명령어
명령어
then
then
then
then
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
else
else
else
else
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
fi
fi
fi
fi
26
‘if/else’ 명령어 예제
 스크립트 작성/실행하기 (ifelseTest)
27
‘if/elif/else’ 명령어
 다중택일(multi-way
decision making)을 표현하
는데 사용함
 ‘if’ 다음의 명령어가 거짓으
로 평가되면 ‘elif’ 다음의 명
령어를 평가하고 이 명령어
의 수행이 성공하면 ‘then’
이하의 문장을 실행
 주어진 ‘elif’문장이 모두 실
패인 경우 ‘else’이하의 문
장이 실행됨
형식
형식
형식
형식
if
if
if
if 명령어
명령어
명령어
명령어
then
then
then
then
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
elif
elif
elif
elif 명령어
명령어
명령어
명령어
then
then
then
then
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
elif
elif
elif
elif 명령어
명령어
명령어
명령어
then
then
then
then
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
else
else
else
else
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
fi
fi
fi
fi
28
‘if/elif/else’ 명령어 예제(1)
 스크립트 작성하기 (tellme)
29
‘if/elif/else’ 명령어 예제(1)(Cont’d)
 스크립트 실행하기 (tellme)
30
‘if/elif/else’ 명령어 예제(2)
 스크립트 작성하기 (tellme2)
31
 스크립트 실행하기 (tellme2)
‘if/elif/else’ 명령어 예제(2)(Cont’d)
32
내장명령어 ‘null’
 콜론(:)으로 나타냄
 실제 아무런 작업도 하지
않으며 단지 종료 상태를 0
으로 돌려줌
 주로 ‘if’다음에 어떤 작업
도 지정하고 싶지 않을 때
사용 (‘then’다음에 문장을
기술하지 않으면 에러가
발생하기 때문)
 무한루프를 작성할 때도
사용
33
‘case’ 명령어
 다중분기(multiway
branching) 명령어로써,
if/elif 대신 사용가능
 ‘case’ 변수와 대응되는
‘value’가 없으면 ‘*)’ 기호
다음에서부터 ‘esac’ 사이
의 문장들을 수행함
 ‘*)’ 기호의 역할은 if/else
조건문에서 else와 동일
 ‘case’ 변수의 값에는 와일
드카드나 |(OR연산자)를
사용할 수 없음
형식
형식
형식
형식
case
case
case
case 변수
변수
변수
변수 in
in
in
in
value1)
value1)
value1)
value1)
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
;;
;;
;;
;;
value2)
value2)
value2)
value2)
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
;;
;;
;;
;;
*)
*)
*)
*)
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
;;
;;
;;
;;
esac
esac
esac
esac
34
‘case’ 명령어 예제
 스크립트 작성하기 (xcolors)
35
‘case’ 명령어 예제(Cont’d)
 스크립트 실행하기 (xcolors)
36
루프 명령어
 루프 명령어는 명령어 혹은 명령어 집합을,
일정 회수만큼 반복하거나 특정한 조건을
만족할 때까지 계속 실행시켜야 하는 경우
에 사용
 배시 쉘에서는 for, while, until과 같은 세 가
지 루프를 지원함
37
‘for’ 명령어
 ‘for’ 루프 명령어는 정해진 횟수의 반복을 위해 사
용
 일련의 파일이나 사용자에 대해 동일한 명령어들
을 반복하여 실행시킴
 변수(variable)에 단어가 대입되면 루프의 몸체에
해당하는 ‘do’와 ‘done’ 사이의 명령어들이 실행됨
형식
형식
형식
형식
for variable in
for variable in
for variable in
for variable in word_list
word_list
word_list
word_list
do
do
do
do
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
done
done
done
done
38
‘for’ 명령어 예제(1)
 스크립트 작성/실행하기 (forloop)
39
‘for’ 명령어 예제(2)
 스크립트 작성/실행하기 (backup)
40
‘while’ 명령어
 ‘while’ 명령어는 다음에 따라오는 명령어를 평가해서, 종
료상태가 0이면 루프 몸체(do와 done사이)의 명령어들을
수행시킴
 ‘while’ 루프에 의해 명령어의 종료 상태가 0이 아닌 값으
로 바뀔 때까지 루프가 계속됨
 종료 상태가 0이 아닌 값인 경우 프로그램의 제어는 done
다음으로 옮겨져서 계속 실행
형식
형식
형식
형식
while
while
while
while 명령어
명령어
명령어
명령어
do
do
do
do
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
done
done
done
done
41
‘while’ 명령어 예제(1)
 스크립트 작성/실행하기 (num)
42
‘while’ 명령어 예제(2)
 스크립트 작성/실행하기 (quiz)
43
‘while’ 명령어 예제(3)
 스크립트 작성/실행하기 (sayit)
44
‘until’ 명령어
 ‘while’ 명령어와 유사하게 사용되나 until 다음에
나오는 명령어가 실패해야 루프가 실행된다는 점
이 다름
 즉, 명령어의 종료 상태가 0이 아닌 경우에 루프가
수행됨
 종료 상태가 0이 되면, 루프가 종료하고 키워드
done 다음 부분이 실행됨 형식
형식
형식
형식
until
until
until
until 명령어
명령어
명령어
명령어
do
do
do
do
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
done
done
done
done
45
‘until’ 명령어 예제
 스크립트 작성/실행하기 (hour)
46
‘select’ 명령어
 배시 쉘에서는 메뉴 생성을 위해 select라는 새로
운 루프를 제공함
 숫자(일련번호)를 선택 항목으로 사용하는 메뉴를
표준 에러로 출력하면 프롬프트 PS3을 이용해 사
용자의 입력을 기다림(PS3의 기본값은 #? 이다)
 사용자가 입력한 값은 배시 쉘의 내장변수인
REPLY에 저장됨 형식
형식
형식
형식
select
select
select
select var
var
var
var in wordlist
in wordlist
in wordlist
in wordlist
do
do
do
do
명령어
명령어
명령어
명령어(
(
(
(들
들
들
들)
)
)
)
done
done
done
done
47
‘select’ 명령어 예제(1)
 스크립트 작성/실행하기 (runit)
48
‘select’ 명령어 예제(2)
 스크립트 작성하기 (class)
49
‘select’ 명령어 예제(2)(Cont’d)
 스크립트 실행하기 (class)
50
루프 제어 명령어
 특별한 상황이 발생하면, 루프를 탈출하거
나, 루프의 시작 부분으로 되돌아가야 하는
경우
 배시 쉘에서는 이러한 특정 상황을 처리할
수 있는 루프 제어 명령어들을 제공함
 shift, break, continue 등
51
‘shift’ 명령어
 인자 목록의 순서에서, 지정한 횟수만큼 왼쪽으
로 이동시킴
 인자 목록이 일단 이동되고 나면 영구히 제거됨
 즉, 왼쪽에서 몇 번째 인자까지 제거할 것인지를
결정하는 것
형식
형식
형식
형식
shift [n]
shift [n]
shift [n]
shift [n]
52
‘shift’ 명령어 예제(1)
 스크립트 작성/실행하기 (shifter)
53
‘shift’ 명령어 예제(2)
 스크립트 작성/실행하기 (doit)
54
‘break’ 명령어
 루프를 즉시 탈출하고자 하는 경우 사용(프로그
램은 계속 진행됨)
 ‘break’ 명령어가 실행되면 프로그램의 제어는
곧바로 done 다음으로 이동함
 무한 루프의 탈출에 유용하게 사용
형식
형식
형식
형식
break [n]
break [n]
break [n]
break [n]
55
‘break’ 명령어 예제
 스크립트 작성/실행하기 (loopbreak)
56
‘continue’ 명령어
 지정한 조건이 참이면 제어를 루프의 시작 부분
으로 되돌림
 ‘continue’ 아래의 명령어들은 모두 무시함
형식
형식
형식
형식
continue [n]
continue [n]
continue [n]
continue [n]
57
‘continue’ 명령어 예제
 스크립트 작성/실행하기 (namelist)
58
중첩 루프의 제어
 스크립트 작성하기 (months)
59
중첩 루프의 제어(Cont’d)
 스크립트 실행하기 (months)
60
루프의 출력을 파일로 리다이렉션
 스크립트 작성/실행하기 (numberit)
61
루프의 출력을 유닉스명령어로 파이프하기
 스크립트 작성/실행하기 (pipe)
배시 쉘 프로그래밍
(고급)
63
함수(1)
 함수는 ATT의 유닉스인 System V R2에 탑재된 본 쉘에
서 처음 지원하기 시작
 명령어나 명령어 집합에 대한 이름
 효율성을 높이거나 프로그램의 모듈화를 위해 사용
 자식프로세스를 생성하지 않고 현재 쉘 내에서 실행됨
형식
형식
형식
형식
예제
예제
예제
예제
function 함수이름 { 명령어(들) ; 명령어(들); }
function dir { echo “Directories: “; ls -l | awk ‘/^d/ {print $NF} ’; }
64
함수(2)
 함수 설정 해제
► unset 명령어를 사용하면 함수를 메모리에서 제거시킬
수 있다
 함수의 익스포트(export)
► 함수를 자식 쉘들에게 익스포트 할 수 있다
형식
형식
형식
형식
unset –f function_name
형식
형식
형식
형식
export –f function_name
65
함수에 관한 중요한 규칙들
 함수는 사용하기 전에 정의해야 함
 함수는 현재 환경 하에서 실행됨. 호출한 스크립트와 변수를 공유하고
인자 역시 위치 인자로 지정하여 함수에 전달할 수 있음. ‘local’ 함수를
사용하여 지역변수를 함수 내에서 생성할 수 있음
 함수 안에서 ‘exit’ 명령어를 실행하면 스크립트 자체가 종료됨
 함수 내에서 사용한 ‘return’ 문은 가장 최근에 실행된 명령어의 종료
상태 값이나, 지정한 인자 값을 반환함
 내장 명령어 ‘export –f’ 를 사용하면 함수를 자식 쉘에 익스포트 함
 ‘declare –f’ 명령어를 사용하여 함수와 그 정의를 출력함
 트랩(trap)은 변수와 같이 함수 간에서도 전역임. 따라서 함수를 호출
한 스크립트와 함수 둘 다 trap의 정의를 공유함
 함수가 다른 파일에 저장되어 있다면 마침표(. 혹은 source) 명령어를
사용하여 현재 스크립트에 불러들일 수 있음
 함수는 자신을 호출할 수 있음. 재귀 호출 횟수는 제한이 없음
66
함수 인자와 반환값
 인자
► 인자의 전달은 위치 인자를 사용하여 함수로 넘겨줌
► 함수에서 사용하는 위치 인자는 scope가 함수내로 한정됨
► 함수 밖에서 사용중인 다른 위치 인자에게는 아무런 영향을 미치
지 않음
 내장 명령어 ‘local’
► 현재 함수에서만 유효한 지역변수를 생성시킴
 내장 명령어 ‘return’
► 함수를 종료한 후, 제어를 함수를 호출한 곳으로 되돌려줌
► ‘return’ 명령어에 아무런 인자도 지정하지 않은 경우, 함수의 반환
값은 스크립트 안에서 최근에 사용된 명령어의 종료 상태가 됨
► ‘return’ 명령어에 0~255 사이의 정수를 인자로 지정하면 그 값이
‘?’ 변수에 저장됨
67
함수 예제(1)
 스크립트 작성하기 (checker)
68
함수 예제(1)(Cont’d)
 스크립트 실행하기 (checker)
69
함수 예제(2)
 스크립트 작성/실행하기 (do_increment)
변수
변수
변수
변수 sum은
은
은
은 increment함수에서
함수에서
함수에서
함수에서 정의하였지만
정의하였지만
정의하였지만
정의하였지만,
지역변수가
지역변수가
지역변수가
지역변수가 된다
된다
된다
된다. 따라서
따라서
따라서
따라서 함수
함수
함수
함수 밖에서는
밖에서는
밖에서는
밖에서는
사용할
사용할
사용할
사용할 수
수
수
수 없다
없다
없다
없다. 아무것도
아무것도
아무것도
아무것도 출력되지
출력되지
출력되지
출력되지 않는다
않는다
않는다
않는다
70
함수 예제(3)
 스크립트 작성/실행하기 (do_square)
71
함수와 ‘source’ 명령어
 함수 저장
► 함수를 종종 .profile에 정의하여 사용자가 로그인함과 동시에 정의
되도록 함
► 저장해둔 함수가 필요한 경우에는 마침표(. 혹은 source) 명령어와
파일이름을 입력하면, 함수의 정의가 활성화됨
72
시그널 트래핑(1)
 프로그램 수행 도중 사용자가 Ctrl –C나 Ctrl-  키를 누르면 시그널이
도착하자마자 프로그램이 종료됨
 사용자가 이러한 시그널에 대해 적절한 동작을 지정해 줄 수 있음. 즉,
시그널을 무시하거나, 필요한 몇몇 작업을 처리하고 종료하도록 설정
해줌
 ‘trap’ 명령어는 시그널에 대해 적절한 대처 방법을 설정할 때 사용
형식
형식
형식
형식
예제
예제
예제
예제
trap ‘명령어; 명령어’ 시그널 번호
trap ‘명령어; 명령어’ 시그널 이름
trap ‘rm tmp*; exit 1’ 0 1 2 15
trap ‘rm tmp*; exit 1’ EXIT HUP INT TERM
시그널
시그널
시그널
시그널 1(정지
정지
정지
정지, hangup), 2(인터럽트
인터럽트
인터럽트
인터럽트, interrupt), 혹은
혹은
혹은
혹은 15(종료
종료
종료
종료, software termination)가
가
가
가
도착하면
도착하면
도착하면
도착하면 모든
모든
모든
모든 tmp 파일을
파일을
파일을
파일을 지우고
지우고
지우고
지우고 종료한다
종료한다
종료한다
종료한다.
73
시그널 트래핑(2)
 시그널 재설정
► 시그널을 기본값으로 재설정하기 위해서는 ‘trap’명령어 다음에
시그널 이름이나 번호만 지정함
 시그널 무시
► ‘trap’ 명령어 다음에 한 쌍의 빈 따옴표가 오면, 뒤에 나열한 시그
널들이 무시됨
예제
예제
예제
예제
trap 2 또는
또는
또는
또는 trap INT
2번
번
번
번 시그널인
시그널인
시그널인
시그널인 SIGINT를
를
를
를 초기값으로
초기값으로
초기값으로
초기값으로 재설정함
재설정함
재설정함
재설정함. 이
이
이
이 시그널은
시그널은
시그널은
시그널은 프로세스를
프로세스를
프로세스를
프로세스를 죽일
죽일
죽일
죽일
때
때
때
때 사용함
사용함
사용함
사용함. 예를들면
예를들면
예를들면
예를들면 Ctrl - C
예제
예제
예제
예제
trap “ ” 1 2 또는
또는
또는
또는 trap “ ” HUP INT
쉘은
쉘은
쉘은
쉘은 1번
번
번
번 시그널
시그널
시그널
시그널(SIGHUP)과
과
과
과 2번
번
번
번 시그널
시그널
시그널
시그널(SIGINT)을
을
을
을 무시함
무시함
무시함
무시함
74
트랩 상태 보기
 ‘trap’ 을 입력하면 trap에 지정된 모든 내용이 출
력됨
# 시그널
시그널
시그널
시그널 2 (Ctrl –C)가
가
가
가 들어오면
들어오면
들어오면
들어오면 스크립트를
스크립트를
스크립트를
스크립트를 종료
종료
종료
종료
시키도록
시키도록
시키도록
시키도록 설정함
설정함
설정함
설정함
# trap 명령어에
명령어에
명령어에
명령어에 인자를
인자를
인자를
인자를 주지
주지
주지
주지 않으면
않으면
않으면
않으면 설정된
설정된
설정된
설정된 모든
모든
모든
모든
트랩을
트랩을
트랩을
트랩을 출력함
출력함
출력함
출력함
75
시그널 트래핑 예제
 스크립트 작성하기(trapping)
76
시그널 트래핑 예제(Cont’d)
 스크립트 실행하기(trapping)
77
함수에서의 트래핑
 함수에서 시그널을 처리하기 위해 트랩이 사용된 상태에서 함수가 호
출되면 전체 스크립트에 영향을 줌. 즉, 트랩은 스크립트에 적용됨
 다음 예에서 인터럽트 키인 ^C 키가 무시되도록 트랩을 설정함
 스크립트 작성하기 (fun_trap)
78
함수에서의 트래핑(Cont’d)
 스크립트 실행하기 (fun_trap)
# trap 명령어가
명령어가
명령어가
명령어가 인터럽트
인터럽트
인터럽트
인터럽트 키
키
키
키(^C)인
인
인
인 2번
번
번
번 시그널을
시그널을
시그널을
시그널을 무시함
무시함
무시함
무시함
# ^C 키를
키를
키를
키를 누르면
누르면
누르면
누르면 Caught in a trap 메시지를
메시지를
메시지를
메시지를 출력하고
출력하고
출력하고
출력하고,
스크립트는
스크립트는
스크립트는
스크립트는 영원히
영원히
영원히
영원히 실행됨
실행됨
실행됨
실행됨
# 주
주
주
주 스크립트가
스크립트가
스크립트가
스크립트가 무한루프에
무한루프에
무한루프에
무한루프에 빠짐
빠짐
빠짐
빠짐
79
디버깅
 스크립트 디버깅(debugging)에 가장 많이 사용되
는 방법으로 set 명령에 –x 옵션을 사용함
(또는 bash 명령어에 –x 옵션을 사용하기도 함)
 이러한 옵션들은 스크립트의 수행 과정을 추적해
볼 수 있게 함
 스크립트 안의 명령어들이 치환되는 과정을 먼저
출력하고 나서 명령어의 실행이 이루어짐
 스크립트 안의 문장을 보여줄 때는 앞에 + 기호가
붙음
80
디버깅 예제
 스크립트 작성하기 (todebug)
81
디버깅 예제(Cont’d)
 스크립트 실행하기 (todebug)

More Related Content

Similar to Shellscript_doc.pdf

Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Jaejin Yun
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012Esun Kim
 
Perl Script Document
Perl Script DocumentPerl Script Document
Perl Script Document오석 한
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이fromitive
 
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기Jinkyoung Kim
 
Hackerschool FTZ 문제 풀이
Hackerschool FTZ 문제 풀이Hackerschool FTZ 문제 풀이
Hackerschool FTZ 문제 풀이re4lfl0w
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R BasicsYoonwhan Lee
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
Code complete chapter 19, 20 organize
Code complete chapter 19, 20 organizeCode complete chapter 19, 20 organize
Code complete chapter 19, 20 organizehanstar17
 
Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-Interpretereva
 
Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-InterpreterJuhwan Yun
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법SeongHyun Ahn
 
Vs2010 visual cpp_shortcut
Vs2010 visual cpp_shortcutVs2010 visual cpp_shortcut
Vs2010 visual cpp_shortcutGilsuk Hong
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)유익아카데미
 

Similar to Shellscript_doc.pdf (20)

파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
 
Perl Script Document
Perl Script DocumentPerl Script Document
Perl Script Document
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이해커스쿨 FTZ 문제 풀이
해커스쿨 FTZ 문제 풀이
 
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
 
07. type system
07. type system07. type system
07. type system
 
Hackerschool FTZ 문제 풀이
Hackerschool FTZ 문제 풀이Hackerschool FTZ 문제 풀이
Hackerschool FTZ 문제 풀이
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
Code complete chapter 19, 20 organize
Code complete chapter 19, 20 organizeCode complete chapter 19, 20 organize
Code complete chapter 19, 20 organize
 
Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-Interpreter
 
Bash-as-a-Interpreter
Bash-as-a-InterpreterBash-as-a-Interpreter
Bash-as-a-Interpreter
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
Clojure Chapter.6
Clojure Chapter.6Clojure Chapter.6
Clojure Chapter.6
 
Vs2010 visual cpp_shortcut
Vs2010 visual cpp_shortcutVs2010 visual cpp_shortcut
Vs2010 visual cpp_shortcut
 
What’s new in c++11
What’s new in c++11What’s new in c++11
What’s new in c++11
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
 

Shellscript_doc.pdf

  • 3. 3 쉘 스크립트 명령어가 명령행에서가 아니라 파일 안에서 실행 될 때, 이 파일을 쉘 스크립트라 함 대화형 기능으로 동작하지 않음 BASH_ENV 환경변수에서 지정한 파일 (‘BASH_ENV 파일’)을 실행함 (.bashrc) 이러한 BASH_ENV 파일을 읽어들인 후, 쉘은 스 크립트 안의 명령어들을 실행
  • 4. 4 쉘 스크립트 작성절차 일반적으로 편집기에서 작성(vi, gedit 등) 주석(‘#’ 기호)과 명령어로 구성 첫 번째 행 배시 쉘 프로그램 유닉스 명령어, 본 쉘 명령어, 프로그램 구조, 주석 등으로 이루어 짐 #!/bin/bash #!/bin/bash #!/bin/bash #!/bin/bash : : : : 항상 항상 항상 항상 스크립트의 스크립트의 스크립트의 스크립트의 첫 첫 첫 첫 행에 행에 행에 행에 나와야 나와야 나와야 나와야 함 함 함 함 : : : : 스크립트를 스크립트를 스크립트를 스크립트를 수행할 수행할 수행할 수행할 때 때 때 때 사용할 사용할 사용할 사용할 쉘의 쉘의 쉘의 쉘의 이름을 이름을 이름을 이름을 지정 지정 지정 지정 : : : : 기호 기호 기호 기호 ‘#! #! #! #!’ 는 는 는 는 매직넘버라 매직넘버라 매직넘버라 매직넘버라 불림 불림 불림 불림. . . . 커널이 커널이 커널이 커널이 실행 실행 실행 실행 프로그 프로그 프로그 프로그 램으로 램으로 램으로 램으로 인식해야 인식해야 인식해야 인식해야 하는지의 하는지의 하는지의 하는지의 여부를 여부를 여부를 여부를 나타냄 나타냄 나타냄 나타냄
  • 5. 5 쉘 스크립트 실행권한 부여 파일 생성 후 적절한 권한이 주어져야 쉘 스크립 트 실행이 가능함
  • 6. 6 쉘 스크립트 수행 간단한예제 스크립트 작성하기 (greetings)
  • 7. 7 쉘 스크립트 수행 간단한예제(Cont’d) 스크립트 실행하기 (greetings)
  • 8. 8 내장명령어 ‘read’ 파일이나 터미널로부터 입력을 읽어오기 위함 개행문자(n)가 나타날 때 까지 행을 읽어들임 사용자가 엔터키를 입력할 때까지 프로그램을 일시 중지 시키는 목적으로도 사용함 입력에 입력에 입력에 입력에 역슬래시를 역슬래시를 역슬래시를 역슬래시를 쓸 쓸 쓸 쓸 수 수 수 수 있게 있게 있게 있게 허용함 허용함 허용함 허용함 read –r line Prompt를 를 를 를 출력하고 출력하고 출력하고 출력하고 입력을 입력을 입력을 입력을 기다림 기다림 기다림 기다림. 입력내용은 입력내용은 입력내용은 입력내용은 REPLY변수에 변수에 변수에 변수에 저장 저장 저장 저장 read –p prompt 입력 입력 입력 입력 행에서 행에서 행에서 행에서 명령행 명령행 명령행 명령행 편집을 편집을 편집을 편집을 사용함 사용함 사용함 사용함 (명령행 명령행 명령행 명령행 편집기가 편집기가 편집기가 편집기가 vi라면 라면 라면 라면 입력행에서 입력행에서 입력행에서 입력행에서 vi 키를 키를 키를 키를 이용하여 이용하여 이용하여 이용하여 편집 편집 편집 편집 가능 가능 가능 가능) read –e 입력받은 입력받은 입력받은 입력받은 단어 단어 단어 단어 목록을 목록을 목록을 목록을 arrayname이라는 이라는 이라는 이라는 배열에 배열에 배열에 배열에 저장 저장 저장 저장 read –a arrayname 저장할 저장할 저장할 저장할 특별한 특별한 특별한 특별한 이름이 이름이 이름이 이름이 없으면 없으면 없으면 없으면 read는 는 는 는 REPLY라는 라는 라는 라는 특수 특수 특수 특수 내장변수에 내장변수에 내장변수에 내장변수에 값을 값을 값을 값을 저장함 저장함 저장함 저장함 read 표준입력으로부터 표준입력으로부터 표준입력으로부터 표준입력으로부터 한 한 한 한 행을 행을 행을 행을 읽어서 읽어서 읽어서 읽어서 그중 그중 그중 그중 첫 첫 첫 첫 단어는 단어는 단어는 단어는 변수 변수 변수 변수 first에 에 에 에 저장하고 저장하고 저장하고 저장하고 나머지는 나머지는 나머지는 나머지는 last에 에 에 에 저장함 저장함 저장함 저장함 read first last 표준입력으로부터 표준입력으로부터 표준입력으로부터 표준입력으로부터 한 한 한 한 행을 행을 행을 행을 읽어서 읽어서 읽어서 읽어서 변수 변수 변수 변수 answer에 에 에 에 저장함 저장함 저장함 저장함 read answer 의미 의미 의미 의미 형식 형식 형식 형식
  • 9. 9 내장명령어 ‘read’ 예제 스크립트 작성하기 (nosy)
  • 10. 10 내장명령어 ‘read’ 예제(Cont’d) 스크립트 실행하기 (nosy)
  • 11. 11 산술연산(정수타입계산) ‘declare’ 명령어 (declare –i 사용) # declare # declare # declare # declare –i i i i 명령어를 명령어를 명령어를 명령어를 사용하여 사용하여 사용하여 사용하여 num num num num 변수를 변수를 변수를 변수를 정수 정수 정수 정수 타입으로 타입으로 타입으로 타입으로 선언 선언 선언 선언 # # # # 문자열 문자열 문자열 문자열 hello hello hello hello를 를 를 를 정수타입 정수타입 정수타입 정수타입 변수 변수 변수 변수 num num num num에 에 에 에 대입하려고 대입하려고 대입하려고 대입하려고 하면 하면 하면 하면 대신 대신 대신 대신 0 0 0 0의 의 의 의 값이 값이 값이 값이 num num num num 변수에 변수에 변수에 변수에 지정됨 지정됨 지정됨 지정됨 # # # # 스페이스는 스페이스는 스페이스는 스페이스는 사용하지 사용하지 사용하지 사용하지 않거나 않거나 않거나 않거나 따옴표로 따옴표로 따옴표로 따옴표로 묶어야 묶어야 묶어야 묶어야 함 함 함 함 # # # # 스페이스를 스페이스를 스페이스를 스페이스를 따옴표로 따옴표로 따옴표로 따옴표로 묶었으므로 묶었으므로 묶었으므로 묶었으므로 곱셈이 곱셈이 곱셈이 곱셈이 수행됨 수행됨 수행됨 수행됨 # # # # 변수가 변수가 변수가 변수가 정수타입이므로 정수타입이므로 정수타입이므로 정수타입이므로 부동소수점을 부동소수점을 부동소수점을 부동소수점을 지정하면 지정하면 지정하면 지정하면 구문에러발생 구문에러발생 구문에러발생 구문에러발생
  • 12. 12 산술연산(정수타입계산) ‘let’ 명령어 # i # i # i # i 변수에 변수에 변수에 변수에 5 5 5 5를 를 를 를 저장 저장 저장 저장 # let # let # let # let명령어가 명령어가 명령어가 명령어가 i i i i 변수에 변수에 변수에 변수에 1 1 1 1을 을 을 을 더함 더함 더함 더함. . . . 산술연산에서는 산술연산에서는 산술연산에서는 산술연산에서는 변수 변수 변수 변수 치환을 치환을 치환을 치환을 위해 위해 위해 위해 ‘$ $ $ $’를 를 를 를 사용할 사용할 사용할 사용할 필요가 필요가 필요가 필요가 없음 없음 없음 없음 # # # # 인자들에 인자들에 인자들에 인자들에 스페이스가 스페이스가 스페이스가 스페이스가 있으면 있으면 있으면 있으면 따옴표를 따옴표를 따옴표를 따옴표를 사용 사용 사용 사용 # # # # 복합연산자 복합연산자 복합연산자 복합연산자 += += += +=를 를 를 를 사용하여 사용하여 사용하여 사용하여 i i i i 변수에 변수에 변수에 변수에 1 1 1 1을 을 을 을 더함 더함 더함 더함 # let # let # let # let명령어 명령어 명령어 명령어 대신 대신 대신 대신 (( )) (( )) (( )) (( )) 명령어를 명령어를 명령어를 명령어를 사용할수 사용할수 사용할수 사용할수 있음 있음 있음 있음
  • 13. 13 산술연산(부동소수점타입계산) 배시 쉘은 기본적으로 정수타입만 계산 bc, awk 등의 유틸리티를 사용하여 복잡한 계산 수행
  • 14. 14 위치 인자 스크립트 이름 다음에 공백 문자로 구분된 각 단어를 인자 라 부름 명령행에서 스크립트에 필요한 정보를 넘겨줄 수 있음 명령어 ‘set’을 써서 설정 또는 재설정할 수 있고 이때 이 전 설정 값은 지워짐 “$1” “$2” “$3”으로 으로 으로 으로 평가 평가 평가 평가 “$@” “$1 $2 $3”으로 으로 으로 으로 평가 평가 평가 평가 “$*” 큰따옴표를 큰따옴표를 큰따옴표를 큰따옴표를 사용하였을 사용하였을 사용하였을 사용하였을 때를 때를 때를 때를 제외하고는 제외하고는 제외하고는 제외하고는 $*와 와 와 와 동일한 동일한 동일한 동일한 의미 의미 의미 의미 $@ 모든 모든 모든 모든 위치 위치 위치 위치 인자를 인자를 인자를 인자를 평가 평가 평가 평가 $* 위치 위치 위치 위치 인자의 인자의 인자의 인자의 총 총 총 총 개수를 개수를 개수를 개수를 평가 평가 평가 평가 $# 10번 번 번 번 위치 위치 위치 위치 인자 인자 인자 인자 ${10} 1번부터 번부터 번부터 번부터 9번까지의 번까지의 번까지의 번까지의 위치 위치 위치 위치 인자 인자 인자 인자 $1-$9 현재 현재 현재 현재 쉘 쉘 쉘 쉘 스크립트 스크립트 스크립트 스크립트 이름 이름 이름 이름 $0 의미 의미 의미 의미 위치인자 위치인자 위치인자 위치인자
  • 15. 15 위치 인자 예제 스크립트 작성하기 (greetings2)
  • 16. 16 위치 인자 예제(cont’d) 스크립트 실행하기 (greetings2)
  • 17. 17 ‘set’ 명령어와 위치 인자 예제 스크립트 작성하기 (args)
  • 18. 18 ‘set’ 명령어와 위치 인자 예제(Cont’d) 스크립트 실행하기 (args)
  • 19. 19 내장명령어 ‘test’ 표현식의 평가에 일반적으로 사용 # # # # grep grep grep grep명령어의 명령어의 명령어의 명령어의 종료상태가 종료상태가 종료상태가 종료상태가 성공적으로 성공적으로 성공적으로 성공적으로 수행했으므로 수행했으므로 수행했으므로 수행했으므로 0 0 0 0이 이 이 이 된다 된다 된다 된다 # test # test # test # test명령어는 명령어는 명령어는 명령어는 문자열이나 문자열이나 문자열이나 문자열이나 숫자를 숫자를 숫자를 숫자를 평가하거나 평가하거나 평가하거나 평가하거나, , , , 파일을 파일을 파일을 파일을 검사하기 검사하기 검사하기 검사하기 위해 위해 위해 위해 사용 사용 사용 사용. 0 . 0 . 0 . 0을 을 을 을 반환하면 반환하면 반환하면 반환하면 표현식을 표현식을 표현식을 표현식을 참으로 참으로 참으로 참으로 평가 평가 평가 평가, 1 , 1 , 1 , 1이면 이면 이면 이면 거짓임 거짓임 거짓임 거짓임. . . . 등호 등호 등호 등호(=) (=) (=) (=)기호 기호 기호 기호 좌우에는 좌우에는 좌우에는 좌우에는 스페이스 스페이스 스페이스 스페이스 삽입 삽입 삽입 삽입. . . . # # # # 대괄호를 대괄호를 대괄호를 대괄호를 test test test test명령어 명령어 명령어 명령어 대신 대신 대신 대신 사용할 사용할 사용할 사용할 수 수 수 수 있음 있음 있음 있음 # test # test # test # test명령어에서는 명령어에서는 명령어에서는 명령어에서는 와일드카드를 와일드카드를 와일드카드를 와일드카드를 사용할 사용할 사용할 사용할 수 수 수 수 없음 없음 없음 없음 # $x # $x # $x # $x가 가 가 가 $y $y $y $y보다 보다 보다 보다 큰지 큰지 큰지 큰지( ( ( (- - - -gt gt gt gt) ) ) ) 검사함 검사함 검사함 검사함. 0 . 0 . 0 . 0이면 이면 이면 이면 참 참 참 참, 1 , 1 , 1 , 1이면 이면 이면 이면 거짓 거짓 거짓 거짓 # $x # $x # $x # $x가 가 가 가 $y $y $y $y보다 보다 보다 보다 작거나 작거나 작거나 작거나 같은지 같은지 같은지 같은지( ( ( (- - - -le) le) le) le) 검사함 검사함 검사함 검사함. 0 . 0 . 0 . 0이면 이면 이면 이면 참 참 참 참, 1 , 1 , 1 , 1이면 이면 이면 이면 거짓 거짓 거짓 거짓
  • 20. 20 ‘if’ 명령어 조건을 표현하기 위한 가장 간단한 형태 형식 형식 형식 형식 if if if if 명령어 명령어 명령어 명령어 then then then then 명령어 명령어 명령어 명령어 명령어 명령어 명령어 명령어 fi fi fi fi ( ( ( (숫자 숫자 숫자 숫자 및 및 및 및 문자열에 문자열에 문자열에 문자열에 대해 대해 대해 대해 test test test test 사용 사용 사용 사용 – old) old) old) old) if if if if test test test test 조건식 조건식 조건식 조건식 then then then then 명령어 명령어 명령어 명령어 fi fi fi fi ( ( ( (또는 또는 또는 또는) ) ) ) if [ if [ if [ if [ 문자열 문자열 문자열 문자열/ / / /수식 수식 수식 수식 ] then ] then ] then ] then 명령어 명령어 명령어 명령어 fi fi fi fi 형식 형식 형식 형식 ( ( ( (문자열에 문자열에 문자열에 문자열에 대해 대해 대해 대해 test test test test 사용 사용 사용 사용 – new new new new 형식 형식 형식 형식) ) ) ) if [[ if [[ if [[ if [[ 문자열 문자열 문자열 문자열 조건식 조건식 조건식 조건식 ]] then ]] then ]] then ]] then 명령어 명령어 명령어 명령어 fi fi fi fi ( ( ( (숫자에 숫자에 숫자에 숫자에 대해 대해 대해 대해 let let let let 사용 사용 사용 사용 – new new new new 형식 형식 형식 형식) ) ) ) if (( if (( if (( if (( 수식 수식 수식 수식 )) )) )) ))
  • 21. 21 ‘if’ 명령어 예제 # # # # ‘grep grep grep grep’ 명령어가 명령어가 명령어가 명령어가 /etc/ /etc/ /etc/ /etc/passwd passwd passwd passwd 데이터베이스에서 데이터베이스에서 데이터베이스에서 데이터베이스에서 변수 변수 변수 변수 name name name name을 을 을 을 찾는다 찾는다 찾는다 찾는다. . . . 표준 표준 표준 표준 출력과 출력과 출력과 출력과 표준 표준 표준 표준 에러는 에러는 에러는 에러는 /dev/null /dev/null /dev/null /dev/null로 로 로 로 리다이렉션 리다이렉션 리다이렉션 리다이렉션 됨 됨 됨 됨 # # # # ‘grep grep grep grep’ 명령어의 명령어의 명령어의 명령어의 종료 종료 종료 종료 상태가 상태가 상태가 상태가 0 0 0 0이면 이면 이면 이면, then , then , then , then 에서부터 에서부터 에서부터 에서부터 fi fi fi fi 를 를 를 를 만날 만날 만날 만날 때까지 때까지 때까지 때까지 나오는 나오는 나오는 나오는 문장들을 문장들을 문장들을 문장들을 실행한다 실행한다 실행한다 실행한다. . . . # # # # fi fi fi fi는 는 는 는 then then then then다음에 다음에 다음에 다음에 나오는 나오는 나오는 나오는 명령어 명령어 명령어 명령어 목록의 목록의 목록의 목록의 끝을 끝을 끝을 끝을 의미한다 의미한다 의미한다 의미한다. . . .
  • 22. 22 ‘exit’ 명령어와 ‘?’ 변수 ‘exit’명령어는 스크립트를 중지시키고 명령행으 로 돌아가고자 할 때 사용함 특정 상황이 발생한 탓에 스크립트를 종료시켜야 할 경우 주로 사용 인자는 0~255 사이의 숫자 사용 가능 인자값 0 : 프로그램이 성공적인 수행을 마침 0이외의 값 : 성공적인 수행의 실패를 의미 ‘exit’ 명령어에 주어지는 인자는 쉘의 ‘?’ 변수에 저장됨
  • 23. 23 ‘exit’ 명령어와 ‘?’ 변수 예제 스크립트 작성하기 (bigfiles)
  • 24. 24 ‘exit’ 명령어와 ‘?’ 변수 예제(Cont’d) 스크립트 실행하기 (bigfiles)
  • 25. 25 ‘if/else’ 명령어 양자택일(two-way decision making)을 표 현하는데 사용함 ‘if’ 다음의 명령어가 거 짓으로 평가되면 ‘else’ 다음의 명령어를 실행 함 형식 형식 형식 형식 if if if if 명령어 명령어 명령어 명령어 then then then then 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) else else else else 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) fi fi fi fi
  • 26. 26 ‘if/else’ 명령어 예제 스크립트 작성/실행하기 (ifelseTest)
  • 27. 27 ‘if/elif/else’ 명령어 다중택일(multi-way decision making)을 표현하 는데 사용함 ‘if’ 다음의 명령어가 거짓으 로 평가되면 ‘elif’ 다음의 명 령어를 평가하고 이 명령어 의 수행이 성공하면 ‘then’ 이하의 문장을 실행 주어진 ‘elif’문장이 모두 실 패인 경우 ‘else’이하의 문 장이 실행됨 형식 형식 형식 형식 if if if if 명령어 명령어 명령어 명령어 then then then then 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) elif elif elif elif 명령어 명령어 명령어 명령어 then then then then 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) elif elif elif elif 명령어 명령어 명령어 명령어 then then then then 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) else else else else 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) fi fi fi fi
  • 28. 28 ‘if/elif/else’ 명령어 예제(1) 스크립트 작성하기 (tellme)
  • 29. 29 ‘if/elif/else’ 명령어 예제(1)(Cont’d) 스크립트 실행하기 (tellme)
  • 30. 30 ‘if/elif/else’ 명령어 예제(2) 스크립트 작성하기 (tellme2)
  • 31. 31 스크립트 실행하기 (tellme2) ‘if/elif/else’ 명령어 예제(2)(Cont’d)
  • 32. 32 내장명령어 ‘null’ 콜론(:)으로 나타냄 실제 아무런 작업도 하지 않으며 단지 종료 상태를 0 으로 돌려줌 주로 ‘if’다음에 어떤 작업 도 지정하고 싶지 않을 때 사용 (‘then’다음에 문장을 기술하지 않으면 에러가 발생하기 때문) 무한루프를 작성할 때도 사용
  • 33. 33 ‘case’ 명령어 다중분기(multiway branching) 명령어로써, if/elif 대신 사용가능 ‘case’ 변수와 대응되는 ‘value’가 없으면 ‘*)’ 기호 다음에서부터 ‘esac’ 사이 의 문장들을 수행함 ‘*)’ 기호의 역할은 if/else 조건문에서 else와 동일 ‘case’ 변수의 값에는 와일 드카드나 |(OR연산자)를 사용할 수 없음 형식 형식 형식 형식 case case case case 변수 변수 변수 변수 in in in in value1) value1) value1) value1) 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) ;; ;; ;; ;; value2) value2) value2) value2) 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) ;; ;; ;; ;; *) *) *) *) 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) ;; ;; ;; ;; esac esac esac esac
  • 34. 34 ‘case’ 명령어 예제 스크립트 작성하기 (xcolors)
  • 35. 35 ‘case’ 명령어 예제(Cont’d) 스크립트 실행하기 (xcolors)
  • 36. 36 루프 명령어 루프 명령어는 명령어 혹은 명령어 집합을, 일정 회수만큼 반복하거나 특정한 조건을 만족할 때까지 계속 실행시켜야 하는 경우 에 사용 배시 쉘에서는 for, while, until과 같은 세 가 지 루프를 지원함
  • 37. 37 ‘for’ 명령어 ‘for’ 루프 명령어는 정해진 횟수의 반복을 위해 사 용 일련의 파일이나 사용자에 대해 동일한 명령어들 을 반복하여 실행시킴 변수(variable)에 단어가 대입되면 루프의 몸체에 해당하는 ‘do’와 ‘done’ 사이의 명령어들이 실행됨 형식 형식 형식 형식 for variable in for variable in for variable in for variable in word_list word_list word_list word_list do do do do 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) done done done done
  • 38. 38 ‘for’ 명령어 예제(1) 스크립트 작성/실행하기 (forloop)
  • 39. 39 ‘for’ 명령어 예제(2) 스크립트 작성/실행하기 (backup)
  • 40. 40 ‘while’ 명령어 ‘while’ 명령어는 다음에 따라오는 명령어를 평가해서, 종 료상태가 0이면 루프 몸체(do와 done사이)의 명령어들을 수행시킴 ‘while’ 루프에 의해 명령어의 종료 상태가 0이 아닌 값으 로 바뀔 때까지 루프가 계속됨 종료 상태가 0이 아닌 값인 경우 프로그램의 제어는 done 다음으로 옮겨져서 계속 실행 형식 형식 형식 형식 while while while while 명령어 명령어 명령어 명령어 do do do do 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) done done done done
  • 41. 41 ‘while’ 명령어 예제(1) 스크립트 작성/실행하기 (num)
  • 42. 42 ‘while’ 명령어 예제(2) 스크립트 작성/실행하기 (quiz)
  • 43. 43 ‘while’ 명령어 예제(3) 스크립트 작성/실행하기 (sayit)
  • 44. 44 ‘until’ 명령어 ‘while’ 명령어와 유사하게 사용되나 until 다음에 나오는 명령어가 실패해야 루프가 실행된다는 점 이 다름 즉, 명령어의 종료 상태가 0이 아닌 경우에 루프가 수행됨 종료 상태가 0이 되면, 루프가 종료하고 키워드 done 다음 부분이 실행됨 형식 형식 형식 형식 until until until until 명령어 명령어 명령어 명령어 do do do do 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) done done done done
  • 45. 45 ‘until’ 명령어 예제 스크립트 작성/실행하기 (hour)
  • 46. 46 ‘select’ 명령어 배시 쉘에서는 메뉴 생성을 위해 select라는 새로 운 루프를 제공함 숫자(일련번호)를 선택 항목으로 사용하는 메뉴를 표준 에러로 출력하면 프롬프트 PS3을 이용해 사 용자의 입력을 기다림(PS3의 기본값은 #? 이다) 사용자가 입력한 값은 배시 쉘의 내장변수인 REPLY에 저장됨 형식 형식 형식 형식 select select select select var var var var in wordlist in wordlist in wordlist in wordlist do do do do 명령어 명령어 명령어 명령어( ( ( (들 들 들 들) ) ) ) done done done done
  • 47. 47 ‘select’ 명령어 예제(1) 스크립트 작성/실행하기 (runit)
  • 48. 48 ‘select’ 명령어 예제(2) 스크립트 작성하기 (class)
  • 49. 49 ‘select’ 명령어 예제(2)(Cont’d) 스크립트 실행하기 (class)
  • 50. 50 루프 제어 명령어 특별한 상황이 발생하면, 루프를 탈출하거 나, 루프의 시작 부분으로 되돌아가야 하는 경우 배시 쉘에서는 이러한 특정 상황을 처리할 수 있는 루프 제어 명령어들을 제공함 shift, break, continue 등
  • 51. 51 ‘shift’ 명령어 인자 목록의 순서에서, 지정한 횟수만큼 왼쪽으 로 이동시킴 인자 목록이 일단 이동되고 나면 영구히 제거됨 즉, 왼쪽에서 몇 번째 인자까지 제거할 것인지를 결정하는 것 형식 형식 형식 형식 shift [n] shift [n] shift [n] shift [n]
  • 52. 52 ‘shift’ 명령어 예제(1) 스크립트 작성/실행하기 (shifter)
  • 53. 53 ‘shift’ 명령어 예제(2) 스크립트 작성/실행하기 (doit)
  • 54. 54 ‘break’ 명령어 루프를 즉시 탈출하고자 하는 경우 사용(프로그 램은 계속 진행됨) ‘break’ 명령어가 실행되면 프로그램의 제어는 곧바로 done 다음으로 이동함 무한 루프의 탈출에 유용하게 사용 형식 형식 형식 형식 break [n] break [n] break [n] break [n]
  • 55. 55 ‘break’ 명령어 예제 스크립트 작성/실행하기 (loopbreak)
  • 56. 56 ‘continue’ 명령어 지정한 조건이 참이면 제어를 루프의 시작 부분 으로 되돌림 ‘continue’ 아래의 명령어들은 모두 무시함 형식 형식 형식 형식 continue [n] continue [n] continue [n] continue [n]
  • 57. 57 ‘continue’ 명령어 예제 스크립트 작성/실행하기 (namelist)
  • 58. 58 중첩 루프의 제어 스크립트 작성하기 (months)
  • 59. 59 중첩 루프의 제어(Cont’d) 스크립트 실행하기 (months)
  • 60. 60 루프의 출력을 파일로 리다이렉션 스크립트 작성/실행하기 (numberit)
  • 61. 61 루프의 출력을 유닉스명령어로 파이프하기 스크립트 작성/실행하기 (pipe)
  • 63. 63 함수(1) 함수는 ATT의 유닉스인 System V R2에 탑재된 본 쉘에 서 처음 지원하기 시작 명령어나 명령어 집합에 대한 이름 효율성을 높이거나 프로그램의 모듈화를 위해 사용 자식프로세스를 생성하지 않고 현재 쉘 내에서 실행됨 형식 형식 형식 형식 예제 예제 예제 예제 function 함수이름 { 명령어(들) ; 명령어(들); } function dir { echo “Directories: “; ls -l | awk ‘/^d/ {print $NF} ’; }
  • 64. 64 함수(2) 함수 설정 해제 ► unset 명령어를 사용하면 함수를 메모리에서 제거시킬 수 있다 함수의 익스포트(export) ► 함수를 자식 쉘들에게 익스포트 할 수 있다 형식 형식 형식 형식 unset –f function_name 형식 형식 형식 형식 export –f function_name
  • 65. 65 함수에 관한 중요한 규칙들 함수는 사용하기 전에 정의해야 함 함수는 현재 환경 하에서 실행됨. 호출한 스크립트와 변수를 공유하고 인자 역시 위치 인자로 지정하여 함수에 전달할 수 있음. ‘local’ 함수를 사용하여 지역변수를 함수 내에서 생성할 수 있음 함수 안에서 ‘exit’ 명령어를 실행하면 스크립트 자체가 종료됨 함수 내에서 사용한 ‘return’ 문은 가장 최근에 실행된 명령어의 종료 상태 값이나, 지정한 인자 값을 반환함 내장 명령어 ‘export –f’ 를 사용하면 함수를 자식 쉘에 익스포트 함 ‘declare –f’ 명령어를 사용하여 함수와 그 정의를 출력함 트랩(trap)은 변수와 같이 함수 간에서도 전역임. 따라서 함수를 호출 한 스크립트와 함수 둘 다 trap의 정의를 공유함 함수가 다른 파일에 저장되어 있다면 마침표(. 혹은 source) 명령어를 사용하여 현재 스크립트에 불러들일 수 있음 함수는 자신을 호출할 수 있음. 재귀 호출 횟수는 제한이 없음
  • 66. 66 함수 인자와 반환값 인자 ► 인자의 전달은 위치 인자를 사용하여 함수로 넘겨줌 ► 함수에서 사용하는 위치 인자는 scope가 함수내로 한정됨 ► 함수 밖에서 사용중인 다른 위치 인자에게는 아무런 영향을 미치 지 않음 내장 명령어 ‘local’ ► 현재 함수에서만 유효한 지역변수를 생성시킴 내장 명령어 ‘return’ ► 함수를 종료한 후, 제어를 함수를 호출한 곳으로 되돌려줌 ► ‘return’ 명령어에 아무런 인자도 지정하지 않은 경우, 함수의 반환 값은 스크립트 안에서 최근에 사용된 명령어의 종료 상태가 됨 ► ‘return’ 명령어에 0~255 사이의 정수를 인자로 지정하면 그 값이 ‘?’ 변수에 저장됨
  • 67. 67 함수 예제(1) 스크립트 작성하기 (checker)
  • 69. 69 함수 예제(2) 스크립트 작성/실행하기 (do_increment) 변수 변수 변수 변수 sum은 은 은 은 increment함수에서 함수에서 함수에서 함수에서 정의하였지만 정의하였지만 정의하였지만 정의하였지만, 지역변수가 지역변수가 지역변수가 지역변수가 된다 된다 된다 된다. 따라서 따라서 따라서 따라서 함수 함수 함수 함수 밖에서는 밖에서는 밖에서는 밖에서는 사용할 사용할 사용할 사용할 수 수 수 수 없다 없다 없다 없다. 아무것도 아무것도 아무것도 아무것도 출력되지 출력되지 출력되지 출력되지 않는다 않는다 않는다 않는다
  • 70. 70 함수 예제(3) 스크립트 작성/실행하기 (do_square)
  • 71. 71 함수와 ‘source’ 명령어 함수 저장 ► 함수를 종종 .profile에 정의하여 사용자가 로그인함과 동시에 정의 되도록 함 ► 저장해둔 함수가 필요한 경우에는 마침표(. 혹은 source) 명령어와 파일이름을 입력하면, 함수의 정의가 활성화됨
  • 72. 72 시그널 트래핑(1) 프로그램 수행 도중 사용자가 Ctrl –C나 Ctrl- 키를 누르면 시그널이 도착하자마자 프로그램이 종료됨 사용자가 이러한 시그널에 대해 적절한 동작을 지정해 줄 수 있음. 즉, 시그널을 무시하거나, 필요한 몇몇 작업을 처리하고 종료하도록 설정 해줌 ‘trap’ 명령어는 시그널에 대해 적절한 대처 방법을 설정할 때 사용 형식 형식 형식 형식 예제 예제 예제 예제 trap ‘명령어; 명령어’ 시그널 번호 trap ‘명령어; 명령어’ 시그널 이름 trap ‘rm tmp*; exit 1’ 0 1 2 15 trap ‘rm tmp*; exit 1’ EXIT HUP INT TERM 시그널 시그널 시그널 시그널 1(정지 정지 정지 정지, hangup), 2(인터럽트 인터럽트 인터럽트 인터럽트, interrupt), 혹은 혹은 혹은 혹은 15(종료 종료 종료 종료, software termination)가 가 가 가 도착하면 도착하면 도착하면 도착하면 모든 모든 모든 모든 tmp 파일을 파일을 파일을 파일을 지우고 지우고 지우고 지우고 종료한다 종료한다 종료한다 종료한다.
  • 73. 73 시그널 트래핑(2) 시그널 재설정 ► 시그널을 기본값으로 재설정하기 위해서는 ‘trap’명령어 다음에 시그널 이름이나 번호만 지정함 시그널 무시 ► ‘trap’ 명령어 다음에 한 쌍의 빈 따옴표가 오면, 뒤에 나열한 시그 널들이 무시됨 예제 예제 예제 예제 trap 2 또는 또는 또는 또는 trap INT 2번 번 번 번 시그널인 시그널인 시그널인 시그널인 SIGINT를 를 를 를 초기값으로 초기값으로 초기값으로 초기값으로 재설정함 재설정함 재설정함 재설정함. 이 이 이 이 시그널은 시그널은 시그널은 시그널은 프로세스를 프로세스를 프로세스를 프로세스를 죽일 죽일 죽일 죽일 때 때 때 때 사용함 사용함 사용함 사용함. 예를들면 예를들면 예를들면 예를들면 Ctrl - C 예제 예제 예제 예제 trap “ ” 1 2 또는 또는 또는 또는 trap “ ” HUP INT 쉘은 쉘은 쉘은 쉘은 1번 번 번 번 시그널 시그널 시그널 시그널(SIGHUP)과 과 과 과 2번 번 번 번 시그널 시그널 시그널 시그널(SIGINT)을 을 을 을 무시함 무시함 무시함 무시함
  • 74. 74 트랩 상태 보기 ‘trap’ 을 입력하면 trap에 지정된 모든 내용이 출 력됨 # 시그널 시그널 시그널 시그널 2 (Ctrl –C)가 가 가 가 들어오면 들어오면 들어오면 들어오면 스크립트를 스크립트를 스크립트를 스크립트를 종료 종료 종료 종료 시키도록 시키도록 시키도록 시키도록 설정함 설정함 설정함 설정함 # trap 명령어에 명령어에 명령어에 명령어에 인자를 인자를 인자를 인자를 주지 주지 주지 주지 않으면 않으면 않으면 않으면 설정된 설정된 설정된 설정된 모든 모든 모든 모든 트랩을 트랩을 트랩을 트랩을 출력함 출력함 출력함 출력함
  • 75. 75 시그널 트래핑 예제 스크립트 작성하기(trapping)
  • 76. 76 시그널 트래핑 예제(Cont’d) 스크립트 실행하기(trapping)
  • 77. 77 함수에서의 트래핑 함수에서 시그널을 처리하기 위해 트랩이 사용된 상태에서 함수가 호 출되면 전체 스크립트에 영향을 줌. 즉, 트랩은 스크립트에 적용됨 다음 예에서 인터럽트 키인 ^C 키가 무시되도록 트랩을 설정함 스크립트 작성하기 (fun_trap)
  • 78. 78 함수에서의 트래핑(Cont’d) 스크립트 실행하기 (fun_trap) # trap 명령어가 명령어가 명령어가 명령어가 인터럽트 인터럽트 인터럽트 인터럽트 키 키 키 키(^C)인 인 인 인 2번 번 번 번 시그널을 시그널을 시그널을 시그널을 무시함 무시함 무시함 무시함 # ^C 키를 키를 키를 키를 누르면 누르면 누르면 누르면 Caught in a trap 메시지를 메시지를 메시지를 메시지를 출력하고 출력하고 출력하고 출력하고, 스크립트는 스크립트는 스크립트는 스크립트는 영원히 영원히 영원히 영원히 실행됨 실행됨 실행됨 실행됨 # 주 주 주 주 스크립트가 스크립트가 스크립트가 스크립트가 무한루프에 무한루프에 무한루프에 무한루프에 빠짐 빠짐 빠짐 빠짐
  • 79. 79 디버깅 스크립트 디버깅(debugging)에 가장 많이 사용되 는 방법으로 set 명령에 –x 옵션을 사용함 (또는 bash 명령어에 –x 옵션을 사용하기도 함) 이러한 옵션들은 스크립트의 수행 과정을 추적해 볼 수 있게 함 스크립트 안의 명령어들이 치환되는 과정을 먼저 출력하고 나서 명령어의 실행이 이루어짐 스크립트 안의 문장을 보여줄 때는 앞에 + 기호가 붙음
  • 80. 80 디버깅 예제 스크립트 작성하기 (todebug)