70
CHOCHO ANDR LINUX WHEEL SE SAPZIL SHELL SCRIPT & CRON

LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

Embed Size (px)

Citation preview

Page 1: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

CHOCHO

ANDRLINUX

WHEEL SE

SAPZIL

SHELL SCRIPT & CRON

Page 2: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

CHOCHO

ANDR ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트란?

Page 3: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

CHOCHO

ANDRLINUX

WHEEL SE

SAPZIL

그전에...쉘이란?

Page 4: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL유저와 시스템간의 대화를 중계

명령어를 해석하여 Kernel에 전달

KERNAL SHELL USER

Page 5: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

ANDR쉘 ‘스크립트’란?

쉘을 통하여 프로그램을 만든 것

여러 라인의 코드를 모아놓은 쉘을 위한 스크립트

파이썬에서의 소스코드 파일을 파이썬 스크립트라고 부르듯 쉘 스크립트도 똑같다

Page 6: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

ANDR ANDR시작해볼까요?

- 쉘 스크립트를 만들기 위해서 vi 이용

- 스크립트 파일의 가장 첫 라인은 #!/bin/bash 로 시작

SHEBANG

Page 7: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRLINUX

WHEEL SE

SAPZIL

!

Hello World! /#/test/

ECHO??

/#/test/shelltest echo가 무슨 명령어인지는 조금 있다가 알아봅시다

Page 8: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

Shebang 이란 리눅스에서는 확장자가 윈도우처럼 파일의 형식을 지정하지 않아도 실행 파일을 만들 수 있도록 스크립트 내에 적는 라인. 인터프리터 지정 없이도 Shebang 라인을 통해서 이 파일이 어떤 프로그램을 통해 실행 될 것인지 파악하게 됩니다.

잠깐, SHEBANG 이란?

!

Page 9: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL

방법1

방법 2주의사항

! TIP

이근홍선배님“유저권한으로 하는게 더 좋아요. chmod u+x 추천”

잠깐, SHEBANG 이란?

인터프리터 파일이름.확장자

ex.

스크립트 내에 쉬뱅 라인을 넣고./파일이름 단, 파일 실행 권한을 줘야함

스크립트 실행 전에chmod +x 파일이름

Page 10: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

방법 2 BETTER

잠깐, SHEBANG 이란?

Page 11: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부: (0) 명령어$ echo [str]: 뒤에 전달되는 Str을 출력한다. $ pwd : 현재 경로ex.

$ file [파일이름] : filename의 filetype을 출력한다.ex.

$ cat 파일의 내용을 화면에 출력하는 데 사용되기도 하며 파일을 다른 곳에 순차적인 스트림으로 보내기 위해 사용된다.

Page 12: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL앞 명령 output을 뒷 명령이 input으로 받아들이도록 함ex.ls | grep.txt 를 하면 ls로 나타나는 모든 파일 중 이름에 txt가 들어가는 파일들만 출력해준다.

쉘 스크립트 공부: (0) 명령어

$ tee [option] [파일이름] : 표준출력을 file에 쓰기독립적으로 사용되기 보다는 파이프를 이용하여 다른 command와 함께 사용

ex.

해당 디렉토리 리스트를 result.html 파일에 저장한다.

잠깐, | pipe 를 알고가자

Page 13: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL! TIP

Grep은 강력한 명령어.보다 자세히는 링크 참조http://geundi.tistory.com/113

쉘 스크립트 공부: (0) 명령어

$ basename [file] : 디렉토리명을 제외한 파일명$ dirname file : 파일이름 제외한 디렉토리명

$ grep [str] [file] : 파일 안에서 특정한 패턴(문자열)을 찾는다. 해당 패턴이 있는 줄 전체를 출력한다.ex.grep [옵션] [정규표현식(문자열)] [찾기 대상이 될 파일명]

Page 14: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZILANDR

| pipe 짚은 김에 잠깐 redirection도 짚고 넘어갑시다

redirection: 표준 입력/출력/에러를 화면이 아닌 파일로 대체하는 것을 말한다.

>: redirect output

>>: append output

<: redirect input

Page 15: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부: (0) 명령어

$ export 환경변수 = 값 : parent shell 에서 생성한 변수를 child shell에서도 inherit 할 수 있도록 하는 명령어.ex.

export를 쉘 스크립트에서 쓰기/a.sh /b.sh

WHY???

Page 16: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부: (0) 명령어

Bash 와일드카드

“*” - 모든 character를 대체“?” - 하나의 character를 대체“[]” - 값의 지정된 범위를 대체“{}” - 지정된 리스트에 있는 값들

Page 17: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL! TIP

특정한 환경 변수의 내용만 알고 싶다면 echo $[파일이름]printenv | grep [name]

! TIP

printenv를 하면 모든 환경변수들을 볼 수 있다!

잠깐 variable을 짚고 넘어갑시다

크게 두가지로 나뉨

1. 시스템 변수: 하나의 쉘프로그램에서만 사용 가능한 변수 - 지역변수

2. 환경 변수: 모든 쉘프로그램에서 사용 가능한 변수 (대문자) - 전역변수

Page 18: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (1) 변수

변수이름=값

[주의점]- ‘=’ 사이에 좌우 공백 용납 안함 - 대소문자를 구분한다- 숫자형 변수와 문자형 변수, 구분 안함함- 변수의 내용을 사용시 ‘$(변수명)’ 처럼 쓴다.

Page 19: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZILa.py는 실행성공, b.py는 오류

쉘 스크립트 공부 (1) 변수 +특수변수

$0 : 현재 쉘스크립트의 파일명 (파이썬의 sys.argv)$1 ~ $n : Shell에 부여된 argument의 값 (순서대로)- argument 0번은 쉘 파일 그 자체가 되고, 1번부터는 앞에서부터 하나씩

$? : 이전에 수행한 명령이 성공했는가? 에 따른 번호 (실행됨 - 0)ex.

Page 20: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (1) 변수 +

특수변수

$$ : Shell 자신의 PID$! : Shell이 마지막에 실행한 background process PID$* : 모든 위치 매개변수를 평가$@ : 큰 따옴표를 사용하였을 때를 제외하고는 $*과 동일한 의미# : Shell에 부여된 인수의 개수

${}: string 중간에 변수를 쓰고 싶을 때

$FOOfoo 는 FOOfoo라는 이름의 변수를 뜻하는 것이기 때문에 blank

Page 21: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL

잠깐! Error(exit status)숫자 0 은 정상종료,

1~255 는 에러 코드들 - 숫자마다 다른 에러

$?를 사용하여 이 숫자들을 받는다!

(참고)bit 서버에서는 permission denied 이지만/usr/include/asm-generic/errno-base.h 와/usr/include/asm-generic/errno.h 로 모든 에러코드들을 확인할 수 있다.

Page 22: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (2) 숫자계산

연산자와 숫자, 변수, 기호 사이사이에는 space를 넣는다.

+(더하기), -(빼기), /(나누기) : 자세한 설명은 생략한다*(곱하기): 사용할때는 ‘\*’를 쓴다( ‘*’도 가능)%(나누기 나머지값)

expr: 숫자계산[주의] expr로 지정하는 경우 역작은따옴표(`)를 사용하자. 작은따옴표(‘)가 아니다!!

Page 23: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRLINUX

WHEEL SE

SAPZIL

#/test/shellcal

쉘 스크립트 공부 (2) 숫자계산

Page 24: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRWHEEL SE

ANDRLI`NUX

WHEEL SE

SAPZIL

#/test/shellread

쉘 스크립트 공부 (3) 사용자의 입력

read 를 사용하면 사용자의 입력을 변수로 받을 수 있다.

! TIP

! TIP

select 도 있다. 그 예시는 조금있다가 다시한번 살펴보자

read var 에 부가적으로read -s var 을 하면 패스워드 칠 때처럼타이핑하는게 화면에 보이지 않음 (패스워드용)

Page 25: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (4) if 구문

if [ 조건문 ]then 문장 exitelif [ 조건문 ]then 문장 exitelse 문장fi

Page 26: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (5) 비교문

[ $A -gt $B ] : A가 B보다 크다[ $A -lt $B ] : A가 B보다 작다[ $A -ge $B ] : A가 B보다 크거나 같다[ $A -le $B ] : A가 B보다 작거나 같다[ $A -eq $B ] : A와 B가 같다[ $A -ne $B ] : A와 B는 다르다

[주의] : 휠스크립트는 space에 민감하다.

Page 27: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRLINUX

WHEEL SE

SAPZIL

직접 해보자ㅋ

Page 28: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDR

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

실습 과제 목표!사용자가 두 숫자를 입력하고, 두 숫자의 크기에 따라 A>B면 “A win!”A<B면 “B win!”A=B면 “Draw!”그 외에는“error”로 표시되게 쉘 스크립트를 만들어보자

Page 29: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRLINUX

WHEEL SE

SAPZIL

이상적인 결과

Page 30: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDR

ANDRLINUX

WHEEL SE

SAPZILANDRWHEEL SE 비슷하게 하셨나요?

Page 31: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (5) 비교문 +

문자비교

[ "$string1" = "$string2" ] : $string1 와 $string2 가 같은가[ “$string1” ! “$string2” ] : $string1 와 $string2 가 다른가[ -z “string” ] : 문자열의 길이가 0인가[ -n “string” ] : 문자열의 길이가 0이 아닌가

Page 32: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (6) 관계연산자

-a : and-o : or

...그러나 잘 쓰이지 않는다. Why?

Page 33: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

&& : 앞의 조건문이 참일 때 실행|| : 앞의 조건문이 거짓일 때 실행

쉘 스크립트 공부 (7) 관계 연산자

쉘 스크립트의 ||, && 관계연산자는 계산횟수를 최소한으로 줄이기 위해서, 왼쪽 값의 계산결과로 인해 굳이 오른쪽 값을 계산할 필요가 없으면 오른쪽 명령을 실행하지 않는 원칙을 갖고 있다.

그러므로 이 원칙을 응용하면 쉘 스크립트를 짤 때, 어떤 명령이 성공적으로 수행될 때만 오른쪽 명령을 수행하게 하거나, 어떤 명령이 실패했을 때 최소한 오른쪽 명령은 수행되게 하는 그런 효과를 낼 수 있다.

Page 34: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (7) 관계 연산자

Page 35: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (8) for문

for 변수 in 변수값1 변수값2 변수값3 변수값4 ..do 문장done

파이썬의 for와 비슷하다

! TIP

for i in * : 폴더 안의 파일을 하나씩 가리킨다. $i를 통해 하나씩 이용가능하다.

Page 36: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (8) for문

Page 37: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉬어가는겸 실습해보기 추천예제 by 김두현선배

1부터 100까지의 숫자가 input되고 그 실행한 결과를 각각 redi-rection과 pipe를 이용해서 각각 다른 이름의 파일로 저장하도록 한 뒤스크립트 맨 마지막에 그 결과파일을 파싱해서 내가 원하는 하나의 결과파일로 만들어보자

input숫자 실행방법: input숫자를 그 제곱으로 output결과파일 만드는 법: output에‘49’패턴이 있는것만 모아보자

Page 38: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

쉬어가는겸 실습해보기

이상적인 결과

추천예제 by 김두현선배

Page 39: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

쉬어가는겸 실습해보기 추천예제 by 김두현선배

Page 40: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (9) while문 until문

while [ 조건문 ]do 문장done

while: 조건문이 참이라면 do와 done 사이 반복until: 조건문이 참이라면 do와 done 사이 반복

until [ 조건문 ]do 문장done

! TIP

‘:’ 와 1은 항상 참을 나타낸다

break와 continue 가능

Page 41: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRLINUX

WHEEL SE

SAPZIL

변수 값을 받아들여서, 이 값에 맞는 문장을 실행

쉘 스크립트 공부 (10) case문

case 변수 in 패턴1) 문장 문장;;패턴2) 문장 문장;; esac

! TIP

패턴에 *) 를 사용하면, 모든 예외의 경우를 포함한다

Page 42: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

select + while문 + case문 예제

Page 43: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDR

ANDR ANDRLINUX

WHEEL SE

SAPZIL

select + while문 + case문 예제

Page 44: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZILANDR쉘 스크립트 공부 (11) 함수

함수이름(){문장}

funcname

Page 45: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (11) 함수

Page 46: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

`RLINUXWHEEL SE

SAPZIL

쉘 스크립트 공부: (12) sed

sed는 대화형 기능이 없는 편집기이다. 일명 streaming 편집기. 명령행에서 직접 편집 명령어와 파일을 지정, 작업 후 결과를 화면으로 확인.sed 편집기는 원본을 손상하지 않는다. 리다이렉션을 이용하여 편집 결과를 파일로 저장하여 확인할 수 있다.

이근홍 선배님 “sed를 알면 스크립팅에 극적인 진보가 일어날텐데 시간나면 알아 놓으세요.”

추천 링크 http://hyunkie.tistory.com/51 http://goo.gl/CStrFX

Page 47: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립트 공부 (13) 종료

exit

(쉘 명령어의 경우): shell을 종료한다(쉘 스크립트의 경우): 실행중인 표현문 종료

종종 exit 0 이나 exit 1 을 볼 수 있다뒤에 붙은 숫자가 exit status로 그 스크립트의return 값이 참인지 아닌지를 알려준다

Page 48: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

쉘 스크립 트 공부 (13) 종료

Page 49: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZILANDR쉘 스크립트 공부 (13) 종료

하지만 우리 세미나는 아직 exit아님

Page 50: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

CHOCHO

ANDRLINUX

WHEEL SE

SAPZIL

SHELL SCRIPT & CRON

Page 51: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR ANDRLINUX

WHEEL SE

SAPZIL

크론이란?

Page 52: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

크론은 crontab에 입력한 명령을 기반으로 일정에 따라 계획한 작업을 실행하는 데몬입니다.

. 예약실행 같은 것!

. UNIX/Linux의 자동 스케쥴러 시스템

. 정기적 백업작업에 사용사용자가 직접 제어하지 않고 백그라운드에서 돌면서 여러 작업을 하는 프로그램

Page 53: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

크론 실행시키기

시작: /etc/init.d/cron start 또는 service cron start

종료: /etc/init.d/cron stop 또는 service cron stop

재시작: /etc/init.d/cron restart 또는 service cron restart

실행 되고 있나 확인: ps aux | grep cron

cron이 실행될 때 /var/spool/cron/crontabs 에 현재 사용자가 지정한 crontab이 있는지를 참조

Page 54: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

Crontab ㆍCron table의 약자 ㆍCron에게 언제 무슨 command를 실행시켜라! 하고 알려준다 ㆍCrontab은 크론 작업 목록의 이름이기도 하며 편집할 목록에 있는 명령의 이름이기도 합니다.

/etc/crontab: 시스템의 cron 설정파일

/var/spool/cron/crontabs 에 username으로 저장된다 - 실습 서버에서 user권한으로는 접근 불가 sudo -s 써서 root권한으로 확인 가능

(크론탭)이란?

Page 55: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRLINUX

WHEEL SE

SAPZIL

Crontabcrontab -e: 내용 작성 및 수정

crontab -r: 내용 삭제

crontab -l: 현재 내용 출력

crontab [filename]: [filename]으로 crontab 변경

crontab -u [username] -l: 다른 사용자의 crontab 목록 보기

Page 56: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

/etc/crontab/var/spool/cron/crontabs

ANDRcrontab을 설정할 때 쓰는 두가지 코드:1. vi /etc/crontab - /etc/crontab을 설정 (시스템 전체)

2. crontab -e - /var/spool/cron/crontabs 에 소유주 이름으로 저장

Page 57: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

Crontab 설정

/etc 폴더에 보면 cron.daily, cron.hourly, cron.monthly, cron.weekly 라는 하위 폴더들이 있다

shell script 파일을 이 폴더들 안에 넣어 설정할 수도 있다

Page 58: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRANDR

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

Cron 환경변수SHELL: cron이 돌아가는 shell; 기본값 /bin/shEDITOR: 편집기; 기본값 vimPATH: cron에 쓰일 프로그램을 탐색할 경로HOME: cron에 쓰일 홈 디렉토리LONGNAME: crontab의 소유주MAILTO: 출력을 받아볼 이메일

Page 59: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRANDR

ANDRWHEEL SE

ㆍCron table의 약자 ㆍCron에게 언제 무슨 command를 실행시켜라! 하고 알려준다 ㆍCrontab은 크론 작업 목록의 이름이기도 하며 편집할 목록에 있는 명령의 이름이기도 합니다.

/etc/crontab: 시스템의 cron 설정파일

/var/spool/cron/crontabs 에 username으로 저장된다 - 실습 서버에서 user권한으로는 접근 불가 sudo -s 써서 root권한으로 확인 가능

ANDRLINUX

WHEEL SE

SAPZIL

Cron 명령어 문법

[MM] [HH] [DD] [mm] [d] [username] [command]

MM 분 (0~59)HH 시 (0~23)DD 일 (1~31)mm 월 (1~12)d 요일 (0~7) * 0과 7은 일요일을 뜻함command 실행할 명령어숫자 대신 *를 넣으면 그 조건은 패스

TIP

d 다음에 year가 오기도 하지만 일반적으로 생략가능

username은 /etc/crontab 에선 필수.crontab -e 는 필수아님

Page 60: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

Cron 명령어 예시

30 05 * * * cron.sh# 매일 05시 30분에 cron.sh 실행

* */1 * * * rm -f /var/log/*# 1시간 마다 로그를 삭제

* 15, 17 * * * cron.sh# 15시, 17시에 매 분마다 cron.sh 실행

! TIP

* = 계속 (매분, 매시, 매일, 매달, 매주)

/ = 마다 (*/1 = 1분마다, 1시마다 …)

ANDR

Page 61: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

Putty에서 실행시키기

ANDRANDR

Page 62: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRWHEEL SE

ANDRANDR

ANDRLINUX

WHEEL SE

SAPZIL

Putty에서 실행시키기

Page 63: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRLI`WHEEL SE

SAPZIL

Cron output

별다른 redirection을 해주지 않으면 command의 output은 그 crontab의 주인에게 메일로 발송된다 (환경변수 MAILTO 에 따로 설정이 되어있으면 그 주소로 발송)

Page 64: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRANDR

ANDRLINUX

WHEEL SE

SAPZILANDRWHEEL SE Putty에서 실행시키기

하지만 redirect 시키면?

?WHY?

cron에서 시스템 명령어 (ls, mv, cd 등) 이외에는 절대경로를 사용한다.

왜?

Page 65: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

크론은 절대경로로!

ANDRcron은 시스템에 기본적으로 설치되어져 root에게만 권한이 주어지기 때문에 ls, mv, cd같은 시스템 명령 이외에는 절대경로로 입력해 줘야 한다

Page 66: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRLINUX

WHEEL SE

SAPZIL

미리 정의된 키워드들

@yearly, @annually : 매년 1월 1일 자정에 실행@monthly : 매달 1일 자정에 실행@weekly : 매주 일요일 자정에 실행@daily : 매일 자정에 실행@hourly : 매시 정각에 실행@reboot : 부팅되었을 때 실행

Page 67: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRANDR

ANDRLINUX

WHEEL SE

SAPZIL

Crontab permission

ANDRWHEEL SE

/etc/cron.allow & /etc/cron.deny ㆍ cron.allow가 존재하고 목록에 있는 사용자는 crontab 사용 가능ㆍ cron.deny가 존재하고 목록에 있는 사용자를 제외, crontab 사용 가능 - 둘 다 존재하지 않으면 root만 사용 가능 - 처음엔 존재하지 않으므로 필요시 생성하세요!

ㆍ cron.allow와 cron.deny 둘 다에 같은 유저가 있으면 cron.allow가 먼저 consider되어 사용 가능

Page 68: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRANDR

ANDRLINUX

WHEEL SE

SAPZIL

Anacron

ANDRWHEEL SE

ㆍ 데몬이 아니라 크론과 같이 동작하는 프로그램ㆍ 24시간 켜져 있지 않은 서버/PC에서, 일 이상의 간격으로 정해진 작업을 수행할 때 사용ㆍ /etc/anacrontab 에서 수행할 작업 리스트를 불러옴.ㆍ 수행 시간에 꺼져 있어 수행되지 않았던 작업을 켜졌을 때 작업

Page 69: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDRLINUX

WHEEL SE

SAPZIL

THANK YOU

Page 70: LINUX CHOCHO WHEEL SE SAPZIL ANDR SHELL ... SE LINUXANDRWHEEL SE SAPZIL ANDR ANDR 시작해볼까요? - 쉘 스크립트를 만들기 위해서 vi 이용 - 스크립트 파일의 가장

ANDR

ANDRWHEEL SE

ANDRLINUX

WHEEL SE

SAPZIL

참조2011 Rodumani(정창제)2012 differ(박지민)2012 argon(김두현)-http://gongdoo.tistory.com/241-http://blog.naver.com/kangminser88/220050112192-http://stackoverflow.com/questions/7328223/unix-export-command-http://www.kingcomputerservices.com/unix_101/understanding_unix_shells_and_environment_variables.htm-http://wiki.gentoo.org/wiki/Cron/ko#.ED.81.AC.EB.A1.A0.ED.83.AD_.ED.8E.B8.EC.A7.91