UNIX Unbounded A Beginning Approach

Download Report

Transcript UNIX Unbounded A Beginning Approach

UNIX Unbounded
A Beginning Approach
이성현
Home : nimilx2.hannam.ac.kr
E-mail : [email protected]
Tel : +82-42-629-7559
HANNAM
Network Lab.
목차
 유닉스 쉘 프로그래밍 언어 이해하기
 추가적인 쉘 스크립트 작성하기
 쉘 프로그래밍의 기초
 산술 연산
 루프(loop) 구조
 쉘 프로그램 디버깅
 요약
 질의 및 응답
 실습
유닉스 이론 및 실습
HANNAM
2
Network Lab.
유닉스 쉘 프로그래밍 언어 이해하기
 간단한 스크립트 작성하기
■
who | wc –l
▶ 시스템에 접속한 사용자의 수를 알기 위한 스크립트 작성
유닉스 이론 및 실습
HANNAM
3
Network Lab.
유닉스 쉘 프로그래밍 언어 이해하기
 스크립트 실행하기
■
스크립트 실행의 두 가지 방법
▶ 쉘 실행 명령어의 사용
▶ 쉘 스크립트를 실행 파일로 만들어 실행
■
스크립트 호출하기
▶ 스크립트 파일을 샐행하기 위해서 쉘 호출
▶ 쉘 스크립트 호출 절차




▶ Ex :



유닉스 이론 및 실습
사용자가 파일명을 지정
새로 호출한 쉘이 스크립트를 읽음
실행 파일에 나열된 명령어 해석
쉘 스크립트 내의 명령어 실행
sh won
bash won
ksh won
HANNAM
4
Network Lab.
유닉스 쉘 프로그래밍 언어 이해하기
 스크립트 실행하기
■
실행 가능한 파일 만들기 : chmod 명령어
▶ 작성한 쉘 스크립트 파일을 실행 가능한 파일로 만듬
▶ chmod 명령어를 사용하여 해당 파일의 속성을 변환
문자
누가 영향을 받는가?
u
사용자/자신
g
그룹
o
그 밖의 사용자
a
모든 사용자 : ugo 조합 대신에 사용할 수 있다
문자
허가권한 범주
r
읽기 허가 권한
w
쓰기 허가 권한
x
실행 허가 권한
-
허가 권한 없음
연산자
유닉스 이론 및 실습
허가 권한 범주에 취해진 특정 행위
+
허가 권한 승인
-
허가 권한 거부
=
특정 사용자에 관한 모든 허가 지정
HANNAM Univ.
5
Network Lab.
유닉스 쉘 프로그래밍 언어 이해하기
 스크립트 실행하기
■
실행 가능한 파일 만들기 : chmod 명령어
유닉스 이론 및 실습
HANNAM Univ.
6
Network Lab.
추가적인 쉘 스크립트 작성하기
 쉘 프로그래밍의 특징
▶ 간단한 프로그램 작성법을 따른다
▶ 사용자 사용권한을 위한 강력한 도구이다
▶ 사용자 파일에 임의의 명령어나 일련의 명령어를 추가할 수 있다
▶ 실행 파일의 생성이 가능하다
▶ $ 프롬프트에 실행 파일의 입력을 통해 간단하게 실행할 수 있다
내장된 곳
명령어
Bourne Shell
Korn Shell
Bourne Again
Shell
exit
sh
ksh
bash
for
sh
ksh
bash
if
sh
ksh
bash
ksh
bash
let
유닉스 이론 및 실습
read
sh
ksh
bash
test
sh
ksh
bash
until
sh
ksh
bash
while
sh
ksh
bash
HANNAM Univ.
7
Network Lab.
추가적인 쉘 스크립트 작성하기
 쉘 스크립트 예제 2
유닉스 이론 및 실습
HANNAM Univ.
8
Network Lab.
추가적인 쉘 스크립트 작성하기
 쉘 스크립트 예제 3
유닉스 이론 및 실습
HANNAM Univ.
9
Network Lab.
추가적인 쉘 스크립트 작성하기
 특수 문자 사용하기
echo 명령어는 특수 문자를 인식
■ 특수 문자는 “\”로 시작하고, echo 명령어의 매개변수 문자열로 사용
■
■
ex)
▶ $ echo “\n\n\n” [Enter]
이스케이프 문자
\b
백스페이스
\c
출력 문자열의 마지막에 디폴트 다음 라인([Return] 키)을 금지
\n
캐리지 리턴(carriage return)과 폼 피드 다음 라인([Return] 키)
\r
라인 피드(linefeed) 없이 캐리지 리턴
\t
탭(tab) 문자
\0n
유닉스 이론 및 실습
기능
문자의 ASCII 코드를 표현하기 위한 8진수, 1, 2, 또는 3에 이은 제로
로
HANNAM Univ. 10
Network Lab.
추가적인 쉘 스크립트 작성하기
 스타일에서 로그오프
■
로그오프
▶ 일반적으로 로그오프나 사용자 세션을 닫기 위해 [Ctrl+d]나 exit 사용
▶ ex)
 $ cat bye [Enter]
exit
$
 $ chmod u+x bye [Enter]
Bye [Enter]
$
▶ 위의 예에서 exit를 실행하지 않는 이유
 사용자가 쉘에게 명령어를 전달할 때, 명령어를 실행하기 위해 자식 프로세스 생성
 사용자 로그인 쉘은 부모 프로세스이고, 사용자 스크립트 파일인 bye는 자식 프로세스
 자식 프로세스가 제어를 넘겨 받은 동시에 자식 프로세스를 종료하기 위해 exit 실행
 자식 프로세스가 죽었을 경우, 제어를 부모 프로세스가 넘겨받아 $ 프롬프트가 출력
 즉 : 자식 프로세스가 시작된 직후 종료되기 때문에 스크립트를 실행하지 않음
 bye 스크립트를 실행하기 위해서 .(dot) 명령어를 사용하여, 자식 프로세스를 생성하지 않
아야 exit를 실행
유닉스 이론 및 실습
HANNAM Univ. 11
Network Lab.
추가적인 쉘 스크립트 작성하기
 명령어 실행하기 : .(dot) 명령어
사용자가 현재의 쉘에서 프로그램을 실행하고, 쉘이 자식 프로세스를 생성하
지 못하게 하는 명령어
■ 사용자 시작 파일인 .profile과 같은 스크립트 파일을 시험하기를 원하는 경
우 유용하게 사용
■
유닉스 이론 및 실습
HANNAM Univ. 12
Network Lab.
추가적인 쉘 스크립트 작성하기
 명령어 실행하기 : .(dot) 명령어
■
경로 변경
▶ 사용자는 PATH 쉘 변수를 변경할 수 있고, 사용자의 Home 디렉토리를 추가할 수 있음
▶ 사용자의 Home 디렉토리는 명령어를 찾기 위해 검색
▶ ex)
 $ echo $PATH [Enter]
PATH=\bin:\usr\bin
$ PATH=$PATH:$HOME [Enter]
$ echo $PATH [Enter]
PATH=:\bin:\usr\bin:usr\students/david
$
■
명령어 치환
▶ 매개변수 문자열에 명령어의 출력을 넣을 수 있음
▶ 쉘이 인용부호로 둘러싸인 명령어를 실행한 후, echo로 전달된 문자열에 명령어의 출력을 치환
▶ ex)
 $ echo your current directory; ‘pwd’ [Enter]
유닉스 이론 및 실습
HANNAM Univ. 13
Network Lab.
추가적인 쉘 스크립트 작성하기
 입력 읽기 : read 명령어
변수 값을 할당하기 위한 방법 중 하나는 대입 연산자(=)를 사용하는 것
■ 사용자가 표준 입력장치로부터 문자열을 읽음으로써 변수에 값을 저장
■
▶ 사용자 입력을 위해 read 명령어 사용
▶ read 명령어를 통해 읽은 값을 사용자 변수에 저장
사용자가 값을 할당하는 가장 일반적인 방법으로 대화형 프로그램에서 많이
사용
■ 명령어 실행 절차
■
▶ read가 실행되면, 쉘은 사용자가 텍스트의 한 라인을 입력할 때까지 대기
▶ 하나 이상의 변수에 입력한 텍스트를 저장
▶ 변수들은 명령어 라인에서 read 한 후에 나열되며, 사용자 입력의 끝은 [Enter] 키를 누를 때 종
료
■
read 명령은 대개 echo와 함께 사용
유닉스 이론 및 실습
HANNAM Univ. 14
Network Lab.
추가적인 쉘 스크립트 작성하기
 입력 읽기 : read 명령어
■
스크립트 예
유닉스 이론 및 실습
HANNAM Univ. 15
Network Lab.
추가적인 쉘 스크립트 작성하기
 입력 일기 : read 명령어
유닉스 이론 및 실습
HANNAM Univ. 16
Network Lab.
쉘 프로그래밍의 기초
 쉘 프로그래밍
다른 프로그래밍 언어와 마찬가지로 일련의 명령어 제공
■ 프로그램이 구조화(well-structured)되어 있음
■ 프로그램이 일기 쉽고(readable) 유지 보수가 용이
■
 주석
■
■
■
■
■
프로그램의 문서화(documentation)는 컴퓨터 프로그램을 작성할 때나, 쉘
스크립트 프로그램을 작성할 때 매우 중요
문서화는 프로그램의 목적과 로직(logic)과 프로그램에서 명백하지 않은 명
령어를 설명하고자 할 때 필수적인 요소
문서화는 프로그램을 다른 사람이 읽기 쉽도록 표현
쉘은 # 기호를 주석으로 인식
ex)
▶ #
# program version 3
유닉스 이론 및 실습
HANNAM Univ. 17
Network Lab.
쉘 프로그래밍의 기초
 변수(variable)
유닉스 쉘도 다른 프로그래밍 언어와 마찬가지로 변수를 생성하여 값을 저장
■ 변수에 값을 저장하기 위해서 간단한 변수명 생성후 등호 표시(=)를 이용하
여 변수에 값을 저장
■ 유닉스 쉘 프로그래밍 언어는 정수형, 문자형, 부동 소수점과 같은 자료형을
지원하지 않음
■
▶ ex)
 $ Count=1  count라는 변수에 1이라는 값을 저장
쉘은 인터프리터 언어(interpretive language)이며, 명령어나 변수를 $ 프롬
프트에 직접적으로 입력하여 쉘 스크립트에 기술
■ ex)
■
▶ $ Header=“The Main Menu” [Enter]
$ BUG=insect [Enter]
유닉스 이론 및 실습
HANNAM Univ. 18
Network Lab.
쉘 프로그래밍의 기초
 변수(variable)
unset 명령어를 사용하여 변수를 지우거나 쉘 스크립트가 종료될 때까지 메
모리에 보존
■ ex)
■
▶ $ unset XYZ [Enter]
■
변수의 출력
▶ Echo 명령어를 사용하여 변수의 내용을 출력
 ex)
 $ echo $variable
■
명령어 치환
▶ 역인용 부호(``)안에 명령어를 삽입하고 명령어를 실행할 경우, 변수의 출력에 명령어의 실행 결과
를 치환
▶ Ex)
 $ DATE=`date` [Enter]
 $ echo $DATE [Enter]
유닉스 이론 및 실습
HANNAM Univ. 19
Network Lab.
쉘 프로그래밍의 기초
 명령 라인 매개변수
쉘 스크립트는 특수한 변수(위치 변수 또는 매개 변수)에 있는 명령 라인으
로부터 10개의 명령 라인 매개변수(인자)를 읽을 수 있음
■ 명령 라인 인자는 보통 명령어를 공백으로 구분하여 입력
■ 입력된 인자는 프로그램에서 처리되며, 프로그램의 동작이나 특별한 명령에
서 실행할 수 있도록 변경
■
변수
$0
$1, $2, … $9
유닉스 이론 및 실습
의미
명령 라인에 입력된 스크립트의 이름을 포함
첫 번째부터 아홉 번째까지 각각의 명령 라인 파라미터를 포함
$#
명령 라인 파라미터의 개수를 포함
$@
모든 명령 라인 파라미터를 포함
$?
마지막 명령어의 결과에 대한 상태 값을 포함
$*
모든 명령 라인 파라미터를 포함
$$
수행 중인 프로세스의 PID를 포함
HANNAM Univ. 20
Network Lab.
쉘 프로그래밍의 기초
 명령 라인 매개변수
■
특별한 쉘 변수 이용
유닉스 이론 및 실습
HANNAM Univ. 21
Network Lab.
쉘 프로그래밍의 기초
 명령 라인 매개변수
■
변수 할당
▶ 위치 변수에 값을 할당하는 다른 방법은 set 명령어를 사용하여 명령 인자에 값을 입력
유닉스 이론 및 실습
HANNAM Univ. 22
Network Lab.
쉘 프로그래밍의 기초
 명령 라인 매개변수
■
프로그램의 종료 : exit 명령어
▶ ex)
 exit n
▶ n의 위치는 프로그램의 루틴이 끝나는 지점에 대한 상태를 나타내며, 반환보드(RC; Return
Code)라고 한다
▶ 다른 유닉스 프로그램에서 모두 일치하도록, 보통 결과에 따라 상태 코드를 반환
▶ 부모 프로세스에세 루틴이 끝나는 지점에 대한 상태를 반환하도록 쉘 스크립트 파일을 프로그램
할 수 있음
▶ $ 프롬프트에서 exit 명령어는 로그인 쉘을 종료하고, 로그오프
유닉스 이론 및 실습
HANNAM Univ. 23
Network Lab.
쉘 프로그래밍의 기초
 조건과 테스트
쉘 스크립트를 작성하는데 필요한 제어를 통해 다른 명령어의 결과에 따라
명령어가 수행하도록 작성
■ 유닉스에서 수행되는 모든 명령어는 프로그램의 흐름을 제어하기 위한 숫자
를 반환
■
▶ 0(zero) : 명령어의 성공적인 수행
▶ 다른 숫자 : 명령어의 실패 조건에 해당
■
If-then 구조
▶ if 문장은 조건이 참인지, 거짓인지를 확인하는 메커니즘을 제공
▶ if 문장의 수행 결과에 따라 프로그램에서 명령어 수행의 순서를 변경
▶ ex)
if [condition]
then
commands
….
last command
fi
유닉스 이론 및 실습
HANNAM Univ. 24
Network Lab.
쉘 프로그래밍의 기초
 조건과 테스트
■
if-then 구조
유닉스 이론 및 실습
HANNAM Univ. 25
Network Lab.
쉘 프로그래밍의 기초
 조건과 테스트
■
if-then-else 구조
▶ if 구조에 else 절을 추가함으로써, 거짓 상태를 반환하는 경우 수행하는 명령어들을 정확히 입력
할 수 있도록 해줌
▶ ex)
if [condition]
then
true-commands
……
last-true-command
else
false-commands
……….
last-false-command
fi
유닉스 이론 및 실습
HANNAM Univ. 26
Network Lab.
쉘 프로그래밍의 기초
 조건과 테스트
■
if-then-else 구조
유닉스 이론 및 실습
HANNAM Univ. 27
Network Lab.
쉘 프로그래밍의 기초
 조건과 테스트
■
if-the-elif 구조
▶ 스크립트 파일에 if와 else 구조를 연속해서 여러 번 사용하는 경우, elif 문장을 사용
▶ ex)
if [condition_1]
then
commands_1
elif [condition_2]
then
commands_2
else
command_n
fi
유닉스 이론 및 실습
HANNAM Univ. 28
Network Lab.
쉘 프로그래밍의 기초
 조건과 테스트
■
if-then-elif
유닉스 이론 및 실습
HANNAM Univ. 29
Network Lab.
쉘 프로그래밍의 기초
 조건과 테스트
■
참 또는 거짓 : test 명령어
▶ test는 표현식이 참 또는 거짓을 경우 해당하는 값을 반환하는 쉘 명령에 내장된 명령어
▶ 표현식은 두수가 도수가 동일한지를 비교하는 것처럼 간단하거나 논리 연산자와 관련된 몇 개의
명령어를 테스트하는 것처럼 복잡할 수 있음
▶ test 명령은 스크립트 파일을 작성하는데 매우 유용
유닉스 이론 및 실습
HANNAM Univ. 30
Network Lab.
쉘 프로그래밍의 기초
 조건과 테스트
■
서로 다른 범주 시험하기
▶ test 명령을 시험하기 위해서 두 개의 정수를 사용
▶ 논리 연산자로 두 수를 비교하는 표현을 조립
 ex)
 $ test expression_1 logical operator expression_2
▶ 논리 연산자
 and 논리 연산자(-a) : 양쪽 상태가 참일경우 0을 반환
 or 논리 연산자(-o) : 양쪽 중 하나의 상태가 참일 경우 0을 반환
 not 논리 연산자(!) : 상태가 거짓을 경우 0을 반환
연산자
예제
-eq
number1 –eq number2
number1은 number2와 같은가?
-ne
number1 –ne number2
number1은 number2와 같지 않은가?
-gt
number1 –gt number2
number1은 number2보다 큰가?
-ge
number1 –ge number2
number1은 number2와 크거나 같지 않은가?
-lt
number1 –lt number2
number1은 number2와 작은가?
-le
number1 –le number2
number1은 number2와 작거나 같지 않은가?
유닉스 이론 및 실습
의미
HANNAM Univ. 31
Network Lab.
쉘 프로그래밍의 기초
 조건과 테스트
■
서로 다른 범주 시험하기(숫자값)
유닉스 이론 및 실습
HANNAM Univ. 32
Network Lab.
쉘 프로그래밍의 기초
 서로 다른 범주 시험하기
■
문자 값
▶ test 명령으로 문자를 비교
▶ test 명령은 문자를 비교하는데 다른 연산자를 제공
연산자
예제
의미
=
string1 = string2
String1과 string2는 일치하는가?
!=
string1 != string2
String1과 string2는 일치하지 않는가?
-n
-n string
String 문자(길이 0)를 포함하는가?
-z
-z string2
String1은 빈 문자(길이 0)인가?
▶ ex)
$ STRING5 [Enter]
$ test –z $STRING [Enter]
test: Argument expected
유닉스 이론 및 실습
HANNAM Univ. 33
Network Lab.
쉘 프로그래밍의 기초
 서로 다른 범주 시험하기
■
파일
▶ test 명령어를 사용해서 파일 크기, 파일 종류, 파일 실행 권한과 같은 특징을 볼 수 있음
▶ 10개 이상의 파일의 특징을 확인
연산자
예제
의미
-r
-r filename
filename이 있고, 읽을 수 있는가?
-w
-w filename
filename이 있고, 쓸 수 있는가?
-s
-s filename
filename이 있고, 0이 아닌 길이인가?
-f
-f filename
filename이 있고, 이것이 디렉토리 파일이 아닌가?
-d
-d filename
filename이 있고, 이것이 디렉토리 파일인가?
▶ ex)
$ FILE=myfile [Enter]
$ IF test –r “$FILE” [Enter]
READABLE
유닉스 이론 및 실습
HANNAM Univ. 34
Network Lab.
쉘 프로그래밍의 기초
 서로 다른 범주 시험하기
유닉스 이론 및 실습
HANNAM Univ. 35
Network Lab.
쉘 프로그래밍의 기초
 매개변수 치환
쉘에서 매개 변수에 서술된 옵션에 따라 간단하게 바꾸는 매개 변수 치환을
제공
■ 설정된 변수가 무엇으로 설정되었는지 알기 위해서 사용
■
변수 옵션
의미
$variable
variable에 저장된 값
${variable}
variable에 저장된 값
${variable:-string}
설정되고 비어있지 않으면, variable의 값: 그렇지 않으면 문
문자 값
${variable:+string}
설정되고 비어있지 않으면, variable의 값: 그렇지 않으면 아
아무것도 아니다
${variable:=string}
설정되고 비어있지 않으면, variable의 값: 그렇지 않으면
variable은 string의 값이 설정됨
${variable:?string}
설정되고 비어있지 않으면, variable의 값: 그렇지 않으면, 스
스트링의 값이 출력되고 종료된다.
유닉스 이론 및 실습
HANNAM Univ. 36
Network Lab.
쉘 프로그래밍의 기초
 매개변수 치환
유닉스 이론 및 실습
HANNAM Univ. 37
Network Lab.
산술 연산
 산술 연산
쉘은 산술 연산에 대한 간단한 내장 연산자를 포함하고 있지 않음
■ x=$x +1의 경우처럼 x에 1을 더하는 것이 아니라 문자열 x에 문자열 +1을
추가하는 것으로 인식
■
 산술 연산(sh) : expr 명령
■
산술연산자와 상수를 계산하기 위한 명령어
▶ ex)
$ expr 1+2 [Enter]
3
$ expr 10\% 3 [Enter]
1
■
관계 연산자
▶ expr 명령은 숫자연산과 숫자가 아닌 구문에 대한 관계 연산을 제공
▶ ex)
$ expr Gabe = Gabe [Enter]
1
$ expr 10 \> 20 [Enter]
0
유닉스 이론 및 실습
HANNAM Univ. 38
Network Lab.
산술 연산
 산술 연산자(ksh) : let 명령어
정수 연산을 위한 명령어
■ expr 명령어와 비슷하며, 모든 기본적인 산술 연산을 제공
■
▶ ex)
$ x=100 [Enter]
$ let x = x+1 [Enter]
$ echo $x [Enter]
101
■
let 명령어는 변수의 값을 사용하는 것이 가능
▶ $x 대신에 x라고 입력하면 변수 x의 값을 사용
유닉스 이론 및 실습
HANNAM Univ. 39
Network Lab.
루프(loop) 구조
 반복 구조
문장이나 명령어를 반복하기 위해 사용
■ 프로그래머에게 많은 기능과 유연성을 제공
■ 세 가지 반복 구조를 가짐
■
▶ for, while, until
 for 루프: for-in-done 구조
■
지정한 숫자만큼 명령어를 수행하는 기능을 제공
▶ ex)
for variable
in list-of-value
do
command
….
last command
done
유닉스 이론 및 실습
HANNAM Univ. 40
Network Lab.
루프(loop) 구조
 for 루프 : for-in-done 구조
유닉스 이론 및 실습
HANNAM Univ. 41
Network Lab.
루프(loop) 구조
 while 루프 : while-do-done 구조
지정된 숫자만큼 명령어를 수행하는 기능을 제공
■ for 루프와 달리 조건(condition)이 참인 경우에만 루프를 수행
■
▶ ex)
while [condition]
do
commands
…
last command
done
do와 done 사이의 명령어는 루프 조건이 참(true, 0이 아닌 경우)인 경우에
만 반복 수행
■ 최종적으로 루프 조건에 거짓(false, 0인 경우)를 반환
■
유닉스 이론 및 실습
HANNAM Univ. 42
Network Lab.
루프(loop) 구조
 while 루프 : while-do-done 구조
유닉스 이론 및 실습
HANNAM Univ. 43
Network Lab.
루프(loop) 구조
 until 루프 : until-do-done 구조
루프의 조건이 거짓인 동안에만 명령어를 반복하는 점을 제외하고는 while
과 매우 유사
■ 다른 이벤트에 연관되어 수행되는 스크립트를 작성하는데 유용
■
▶ Ex)
untile [condition]
do
command
….
last command
done
■
첫 번째 수행에서 루프가 참이라면, 반복 구문은 한번도 수행되지 않는 경우
가 발생
유닉스 이론 및 실습
HANNAM Univ. 44
Network Lab.
루프(loop) 구조
 until 루프 : until-do-done 구조
유닉스 이론 및 실습
HANNAM Univ. 45
Network Lab.
쉘 프로그램 디버깅
 쉘 명령어
스크립트 파일을 디버깅하기 위해 sh, ksh, bash 명령어에 옵션을 사용
■ -x 옵션은 디버깅 수행 과정을 출력
■
■
sh 옵션
옵션
수행 기능
-n
명령을 읽기만 하고, 실행하지 않는다
-v
사용자 입력 부분을 그대로 출력한다
-x
스크립트가 실행될 때의 자세한 인자와 명령, 변수들의 정보를 보여준다
▶ Ex) $ sh –x BOX
유닉스 이론 및 실습
HANNAM Univ. 46
Network Lab.
쉘 프로그램 디버깅
 쉘 명령어
유닉스 이론 및 실습
HANNAM Univ. 47
Network Lab.
쉘 프로그램 디버깅
 쉘 명령어
유닉스 이론 및 실습
HANNAM Univ. 48
Network Lab.
요약
 쉘 프로그래밍의 이해
 쉘 프로그램에서의 변수 지정
 쉘 프로그램에서의 제어 구문
 쉘 프로그램에서의 반복 구문
 쉘 프로그램의 디버깅
유닉스 이론 및 실습
HANNAM Univ. 49
Network Lab.
질의 및 응답
유닉스 이론 및 실습
HANNAM Univ. 50
Network Lab.
실습
 쉘 프로그래밍 예제의 작성과 실행
유닉스 이론 및 실습
HANNAM Univ. 51