2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... ·...

30
2.쉘 프로그래밍 상명대학교 소프트웨어학부

Upload: others

Post on 06-Feb-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

2.쉘 프로그래밍

상명대학교 소프트웨어학부

Page 2: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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 파일에서 로그인 직후 사용되는 쉘을확인

Page 3: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 3

쉘(Shell)명령어 해석 및 실행

사용자가 명령 입력

해석/실행

내부명령 : 직접 해당 기능을 수행

외부명령 : 해당 프로그램을 실행(뒤따르는 단어들은 옵션으로 넘겨줌)

echo [문자열…]$ echo date (또는 ‘date’, 또는 “date”)

date

$ echo Today is `date`

Today is 2003년 10월 11일…

Page 4: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 4

쉘(Shell)쉘 변수

사용자정의 쉘 변수

키워드 쉘 변수

$HOME : 홈디렉토리의 절대 경로명

$PATH : 명령을 탐색할 경로

$PS1 : 프롬프트 형태

지역변수와 전역변수지역변수 : 현재 쉘에서만 유효

전역변수 : 자식 쉘에서도 유효export [변수명…]

Page 5: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 5

쉘(Shell)초기화/종료 파일 : 쉘 변수와 실행시킬 명령을 저장

.bash_profile, .bashrc

.bash_logout

별칭

alias [별칭=‘명령’]

unalias 별칭

히스토리 (명령 재실행)

.bash_history 파일에 지난 명령들이 저장

확인 : history 명령

사용 : ↑키, !!, !번호, !패턴

Page 6: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 6

쉘 프로그램쉘 프로그램

쉘이 제공하는 프로그래밍 언어를 이용하여 만들어진프로그램 (파일)

쉘 프로그램 예 : 현재 시스템에 접속한 사용자 수

쉘 프로그램 사용 x

who | wc –l [enter]

쉘 프로그램 사용

<how_many.sh>dateecho 현재시스템에접속한사용자는 `who | wc -l` 명입니다

Page 7: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 7

쉘 프로그램

작성

일반 텍스트 파일로 작성

첫줄에는 실행할 쉘 이름을 적어줌 : #!/bin/bash

실행 (예: script.sh)

chmod +x script.sh → $ script.sh

$ bash script.sh

Page 8: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

Page 9: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 9

쉘 프로그래밍의 특징간단한 프로그램 작성법을 따른다

사용자 사용권한을 위한 강력한 도구이다

사용자 파일에 임의의 명령어나 일련의명령어를 추가할 수 있다

실행 파일의 생성이 가능하다

$ 프롬프트에 실행 파일의 입력을 통해간단하게 실행할 수 있다

Page 10: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 10

쉘 프로그래밍 - 변수유닉스 쉘도 다른 프로그래밍 언어와마찬가지로 변수를 생성하여 값을 저장

변수에 값을 저장하기 위해서 간단한 변수명생성 후 등호 표시(=)를 이용하여 변수에 값을저장

Ex) $ varible=3$ echo $variable$ 3

유닉스 쉘 프로그래밍 언어는 정수형, 문자형, 부동 소수점과 같은 자료형을 지원하지 않음

Page 11: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 11

쉘 프로그래밍 - 변수unset 명령어를 사용하여 변수를 지우거나 쉘스크립트가 종료될 때까지 메모리에 보존

ex) $ unset variable [Enter]변수의 출력

Echo 명령어를 사용하여 변수의 내용을 출력ex) $ echo $variable

명령어 치환역인용 부호(``)안에 명령어를 삽입하고명령어를 실행할 경우, 변수의 출력에 명령어의실행 결과를 치환Ex)$ DATE=`date` [Enter]

$ echo $DATE [Enter]

Page 12: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 12

쉘 프로그래밍 - 변수쉘 스크립트는 특수한 변수(위치 변수 또는매개 변수)에 있는 명령 라인으로부터 10개의명령 라인 매개변수(인자)를 읽을 수 있음

명령 라인 인자는 보통 명령어를 공백으로구분하여 입력

입력된 인자는 프로그램에서 처리되며, 프로그램의 동작이나 특별한 명령에서 실행할수 있도록 변경

Page 13: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 13

쉘 프로그래밍 - 변수

모든 명령 라인 파라미터를 포함$*

수행 중인 프로세스의 PID를 포함$$

마지막 명령어의 결과에 대한 상태 값을 포함$?

모든 명령 라인 파라미터를 포함$@

명령 라인 파라미터의 개수를 포함$#

첫 번째부터 아홉 번째까지 각각의 명령 라인 파라미터를 포함$1, $2, …

$9

명령 라인에 입력된 스크립트의 이름을 포함$0

의 미변수

Page 14: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

Page 15: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

Page 16: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 16

쉘 프로그래밍 – 조건과 테스트

쉘 스크립트를 작성하는데 필요한 제어를 통해다른 명령어의 결과에 따라 명령어가수행하도록 작성

if-then 구조if 문장은 조건이 참인지, 거짓인지를 확인하는메커니즘을 제공

if 문장의 수행 결과에 따라 프로그램에서 명령어수행의 순서를 변경

if [condition]then

commands….last command

fi

Page 17: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 17

쉘 프로그래밍 – 조건과 테스트

if-then구조 사용 예

<if_then.sh>DIR=$HOME/unixif [ $# = 1 ]then

cp $1 $DIRfiexit

Page 18: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 18

쉘 프로그래밍 – 조건과 테스트

if-then-else 구조if 구조에 else 절을 추가함으로써, 거짓 상태를반환하는 경우 수행하는 명령어들을 정확히 입력할수 있도록 해줌

if [condition]then

true-commands……last-true-command

elsefalse-commands……….last-false-command

fi

Page 19: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

Page 20: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 20

쉘 프로그래밍 – 조건과 테스트

if-the-elif 구조스크립트 파일에 if와 else 구조를 연속해서 여러 번사용하는 경우, elif 문장을 사용

if [condition]then

command-1elif [condition_2]then

command-2else

command -3fi

Page 21: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

Page 22: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 22

쉘 프로그래밍 – 조건과 테스트

서로 다른 범주 시험하기test 명령을 시험하기 위해서 두 개의 정수를 사용

논리 연산자로 두 수를 비교하는 표현을 조립

ex)

$ test expression_1 logical operator expression_2

논리 연산자

and 논리 연산자(-a) : 양쪽 상태가 참일경우 0을 반환

or 논리 연산자(-o) : 양쪽 중 하나의 상태가 참일경우 0을 반환

not 논리 연산자(!) : 상태가 거짓을 경우 0을 반환

Page 23: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

의미예제연산자

Page 24: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

Page 25: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 25

쉘 프로그래밍 – 조건과 테스트

문자 값 비교

test 명령은 문자를 비교하는데 다른연산자를 제공

String1은 빈 문자(길이 0)인가?-z string2-z

String 문자(길이 0)를 포함하는가?-n string-n

String1과 string2는 일치하지 않는가?string1 != string2!=

String1과 string2는 일치하는가?string1 = string2=

의미예제연산자

Page 26: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 26

산술 & 관계 연산산술 연산

관계 연산자

$ expr 1+2 [Enter]3$ expr 10\% 3 [Enter]1

$ expr Gabe = Gabe [Enter]1$ expr 10 \> 20 [Enter]0

Page 27: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

Page 28: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

Page 29: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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

Page 30: 2.쉘프로그래밍cfs5.tistory.com/upload_control/download.blog?f... · 유닉스프로그래밍-상명대학교 12 쉘프로그래밍-변수 쉘스크립트는특수한변수(위치변수또는

유닉스프로그래밍 -상명대학교 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