2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... ·...
TRANSCRIPT
2.쉘 프로그래밍
상명대학교 소프트웨어학부
유닉스프로그래밍 -상명대학교 2
쉘(Shell)쉘 : 명령어 해석기
단말기나 파일로부터 입력된 명령을 해석하여 적절한명령을 실행
시스템 환경 변경, 명령어 입력 편의를 제공
쉘의 종류Bourne Shell(sh) /bin/sh
Korn Shell(ksh) /bin/ksh
C Shell(csh) /bin/csh
Bourne Again Shell(bash) /bin/bash
/etc/passwd 파일에서 로그인 직후 사용되는 쉘을확인
유닉스프로그래밍 -상명대학교 3
쉘(Shell)명령어 해석 및 실행
사용자가 명령 입력
해석/실행
내부명령 : 직접 해당 기능을 수행
외부명령 : 해당 프로그램을 실행(뒤따르는 단어들은 옵션으로 넘겨줌)
echo [문자열…]$ echo date (또는 ‘date’, 또는 “date”)
date
$ echo Today is `date`
Today is 2003년 10월 11일…
유닉스프로그래밍 -상명대학교 4
쉘(Shell)쉘 변수
사용자정의 쉘 변수
키워드 쉘 변수
$HOME : 홈디렉토리의 절대 경로명
$PATH : 명령을 탐색할 경로
$PS1 : 프롬프트 형태
…
지역변수와 전역변수지역변수 : 현재 쉘에서만 유효
전역변수 : 자식 쉘에서도 유효export [변수명…]
유닉스프로그래밍 -상명대학교 5
쉘(Shell)초기화/종료 파일 : 쉘 변수와 실행시킬 명령을 저장
.bash_profile, .bashrc
.bash_logout
별칭
alias [별칭=‘명령’]
unalias 별칭
히스토리 (명령 재실행)
.bash_history 파일에 지난 명령들이 저장
확인 : history 명령
사용 : ↑키, !!, !번호, !패턴
유닉스프로그래밍 -상명대학교 6
쉘 프로그램쉘 프로그램
쉘이 제공하는 프로그래밍 언어를 이용하여 만들어진프로그램 (파일)
쉘 프로그램 예 : 현재 시스템에 접속한 사용자 수
쉘 프로그램 사용 x
who | wc –l [enter]
쉘 프로그램 사용
<how_many.sh>dateecho 현재시스템에접속한사용자는 `who | wc -l` 명입니다
유닉스프로그래밍 -상명대학교 7
쉘 프로그램
작성
일반 텍스트 파일로 작성
첫줄에는 실행할 쉘 이름을 적어줌 : #!/bin/bash
실행 (예: script.sh)
chmod +x script.sh → $ script.sh
$ bash script.sh
유닉스프로그래밍 -상명대학교 8
쉘 프로그램실행 가능한 파일 만들기 : chmod 명령어
작성한 쉘 스크립트 파일을실행 가능한 파일로 만듬
chmod 명령어를 사용하여 해당파일의 속성을 변환
예) script.sh 의 권한
특정 사용자에 관한 모든허가 지정
=
허가 권한 거부-
허가 권한 승인+
허가 권한 범주에 취해진특정 행위
연산자
허가 권한 없음-
실행 허가 권한x
쓰기 허가 권한w
읽기 허가 권한r
허가권한 범주문자
모든 사용자 : ugo 조합대신에 사용할 수 있다
a
그 밖의 사용자o
그룹g
사용자/자신u
누가 영향을 받는가?문자
$ chmod u+x script.sh
$ chmod g+wx script.sh
$ chmod a=rwx script.sh
유닉스프로그래밍 -상명대학교 9
쉘 프로그래밍의 특징간단한 프로그램 작성법을 따른다
사용자 사용권한을 위한 강력한 도구이다
사용자 파일에 임의의 명령어나 일련의명령어를 추가할 수 있다
실행 파일의 생성이 가능하다
$ 프롬프트에 실행 파일의 입력을 통해간단하게 실행할 수 있다
유닉스프로그래밍 -상명대학교 10
쉘 프로그래밍 - 변수유닉스 쉘도 다른 프로그래밍 언어와마찬가지로 변수를 생성하여 값을 저장
변수에 값을 저장하기 위해서 간단한 변수명생성 후 등호 표시(=)를 이용하여 변수에 값을저장
Ex) $ varible=3$ echo $variable$ 3
유닉스 쉘 프로그래밍 언어는 정수형, 문자형, 부동 소수점과 같은 자료형을 지원하지 않음
유닉스프로그래밍 -상명대학교 11
쉘 프로그래밍 - 변수unset 명령어를 사용하여 변수를 지우거나 쉘스크립트가 종료될 때까지 메모리에 보존
ex) $ unset variable [Enter]변수의 출력
Echo 명령어를 사용하여 변수의 내용을 출력ex) $ echo $variable
명령어 치환역인용 부호(``)안에 명령어를 삽입하고명령어를 실행할 경우, 변수의 출력에 명령어의실행 결과를 치환Ex)$ DATE=`date` [Enter]
$ echo $DATE [Enter]
유닉스프로그래밍 -상명대학교 12
쉘 프로그래밍 - 변수쉘 스크립트는 특수한 변수(위치 변수 또는매개 변수)에 있는 명령 라인으로부터 10개의명령 라인 매개변수(인자)를 읽을 수 있음
명령 라인 인자는 보통 명령어를 공백으로구분하여 입력
입력된 인자는 프로그램에서 처리되며, 프로그램의 동작이나 특별한 명령에서 실행할수 있도록 변경
유닉스프로그래밍 -상명대학교 13
쉘 프로그래밍 - 변수
모든 명령 라인 파라미터를 포함$*
수행 중인 프로세스의 PID를 포함$$
마지막 명령어의 결과에 대한 상태 값을 포함$?
모든 명령 라인 파라미터를 포함$@
명령 라인 파라미터의 개수를 포함$#
첫 번째부터 아홉 번째까지 각각의 명령 라인 파라미터를 포함$1, $2, …
$9
명령 라인에 입력된 스크립트의 이름을 포함$0
의 미변수
유닉스프로그래밍 -상명대학교 14
쉘 프로그래밍 - 변수
변수 사용 예 입력
<variable-1.sh>echo "The following is output of the $0 script:"echo "Total number of command line arguments: $#"echo "The first parameter is: $1 "echo "The second parameter is: $2 "echo "This is the list of all is parameters: $* "
$ bash variable-1.sh
$ bash variable-1.sh is empty
유닉스프로그래밍 -상명대학교 15
쉘 프로그래밍 - 변수
변수 사용 예 입력
<variable-2.sh>dateset `date`echo $1 set `date`echo $1 $2 set `date`echo $1 $2 $3 set `date`echo $1 $2 $3 $4
유닉스프로그래밍 -상명대학교 16
쉘 프로그래밍 – 조건과 테스트
쉘 스크립트를 작성하는데 필요한 제어를 통해다른 명령어의 결과에 따라 명령어가수행하도록 작성
if-then 구조if 문장은 조건이 참인지, 거짓인지를 확인하는메커니즘을 제공
if 문장의 수행 결과에 따라 프로그램에서 명령어수행의 순서를 변경
if [condition]then
commands….last command
fi
유닉스프로그래밍 -상명대학교 17
쉘 프로그래밍 – 조건과 테스트
if-then구조 사용 예
<if_then.sh>DIR=$HOME/unixif [ $# = 1 ]then
cp $1 $DIRfiexit
유닉스프로그래밍 -상명대학교 18
쉘 프로그래밍 – 조건과 테스트
if-then-else 구조if 구조에 else 절을 추가함으로써, 거짓 상태를반환하는 경우 수행하는 명령어들을 정확히 입력할수 있도록 해줌
if [condition]then
true-commands……last-true-command
elsefalse-commands……….last-false-command
fi
유닉스프로그래밍 -상명대학교 19
쉘 프로그래밍 – 조건과 테스트
if-then-else 구조 사용예
<if_then_else.sh>DIR=$HOME/unixif [ $# = 1 ]then
cp $1 $DIRElse
echo “You must specify a file name. Try again.”fiexit
유닉스프로그래밍 -상명대학교 20
쉘 프로그래밍 – 조건과 테스트
if-the-elif 구조스크립트 파일에 if와 else 구조를 연속해서 여러 번사용하는 경우, elif 문장을 사용
if [condition]then
command-1elif [condition_2]then
command-2else
command -3fi
유닉스프로그래밍 -상명대학교 21
쉘 프로그래밍 – 조건과 테스트
참 또는 거짓 : test 명령어
test는 표현식이 참 또는 거짓을 경우 해당하는 값을반환하는 쉘 명령에 내장된 명령어
<test.sh>echo "Are you OK?"echo -e "Input Y for yes and N for no : \c"read answerif test "$answer" = Ythen
echo "Glad to hear that"else
echo "Go home!"fiexit
유닉스프로그래밍 -상명대학교 22
쉘 프로그래밍 – 조건과 테스트
서로 다른 범주 시험하기test 명령을 시험하기 위해서 두 개의 정수를 사용
논리 연산자로 두 수를 비교하는 표현을 조립
ex)
$ test expression_1 logical operator expression_2
논리 연산자
and 논리 연산자(-a) : 양쪽 상태가 참일경우 0을 반환
or 논리 연산자(-o) : 양쪽 중 하나의 상태가 참일경우 0을 반환
not 논리 연산자(!) : 상태가 거짓을 경우 0을 반환
유닉스프로그래밍 -상명대학교 23
쉘 프로그래밍 – 조건과 테스트
number1은 number2와 작거나 같지 않은가?number1 –le number2-le
number1은 number2와 작은가?number1 –lt number2-lt
number1은 number2와 크거나 같지 않은가?number1 –ge number2-ge
number1은 number2보다 큰가?number1 –gt number2-gt
number1은 number2와 같지 않은가?number1 –ne number2-ne
number1은 number2와 같은가?number1 –eq number2-eq
의미예제연산자
유닉스프로그래밍 -상명대학교 24
쉘 프로그래밍 – 조건과 테스트
test 사용 예<condition_test.sh>echo -e "Enter three numbers and I will show you the largest of them >> \c"read num1 num2 num3if test "$num1" -gt "$num2" -a "$num1" -gt "$num3"then
echo "The largest number is : $num1"elif test "$num2" -gt "$num1" -a "$num2" -gt "$num3"then
echo "The largest number is : $num2"else
echo "The largest number is : $num3"fiecho "Done~! :-)"exit
유닉스프로그래밍 -상명대학교 25
쉘 프로그래밍 – 조건과 테스트
문자 값 비교
test 명령은 문자를 비교하는데 다른연산자를 제공
String1은 빈 문자(길이 0)인가?-z string2-z
String 문자(길이 0)를 포함하는가?-n string-n
String1과 string2는 일치하지 않는가?string1 != string2!=
String1과 string2는 일치하는가?string1 = string2=
의미예제연산자
유닉스프로그래밍 -상명대학교 26
산술 & 관계 연산산술 연산
관계 연산자
$ expr 1+2 [Enter]3$ expr 10\% 3 [Enter]1
$ expr Gabe = Gabe [Enter]1$ expr 10 \> 20 [Enter]0
유닉스프로그래밍 -상명대학교 27
루프(loop) 구조반복 구조
문장이나 명령어를 반복하기 위해 사용
프로그래머에게 많은 기능과 유연성을 제공
세 가지 반복 구조를 가짐
for, while, until
for 루프: for-in-done 구조
지정한 숫자만큼 명령어를 수행하는 기능을 제공
<for_in_done.sh>for count in 1 2 3 10doecho "in the for $count times"doneexit
유닉스프로그래밍 -상명대학교 28
루프(loop) 구조for-in-done 구조 사용 예
<for_in_done_2.sh>if [ $# -ne 2 ]then
echo "Usage: $0 old_file_suffix new_file_suffix"exit 1
fi
for file in *.$1do
mv $file `basename $file $1`$2done
exit 0
유닉스프로그래밍 -상명대학교 29
루프(loop) 구조while 루프 : while-do-done 구조
지정된 숫자만큼 명령어를 수행하는 기능을 제공
for 루프와 달리 조건(condition)이 참인경우에만 루프를 수행
<while_do_done.sh>carryon=Ywhile [ "$carryon" = Y ]do
echo -e "I do the job as long as you type Y: \c"read carryon
doneecho "Good job!"exit
유닉스프로그래밍 -상명대학교 30
루프(loop) 구조until 루프 : until-do-done 구조
루프의 조건이 거짓인 동안에만 명령어를 반복하는점을 제외하고는 while과 매우 유사
첫 번째 수행에서 루프가 참이라면, 반복 구문은한번도 수행되지 않는 경우가 발생
<until_do_done.sh>i=1until [ "$i" -gt 10 ]do
echo " i : $i"let i=i+1
doneecho "Good job!!"exit