7장. 셸 스크립트 프로그래밍.

Slides:



Advertisements
Similar presentations
Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티.
Advertisements

서울지하철노조 설립. 1. 전형적 공기업 군사 문화 가 일 개통 1 호선 서울시 공무원으로 운영 일 3.4 호선 건설한 공사와 합병 공무원신분에서 신분변경 나. 공사 내부의 군사 조직과 군사문화 - 공사 사장 감사 이사 ( 별.
OOOO 주식회사 회 사 현 황회 사 현 황 사 업 현 황사 업 현 황 시 장 분 석시 장 분 석 사업추진전략 재 무 계 획재 무 계 획 투 자 제 안투 자 제 안.
쉘 스크립트와 cron coearth, george.
어서와 Java는 처음이지! 제3장선택과 반복.
광 고 사 항 1. 토요 전도실천 - 일시 : (토) 오후 1시
개인정보의 안전한 관리 방안 보안전략연구소 박나룡.
강 명 수 쉘 관리 강 명 수
제 1장 자바스크립트란 ?.
사회복지법인 실무자 교육.
Linux University of Seoul Computer Science Park Jong wook
Chapter 10 The Bourne Shell
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
Chapter 11 The C Shell.
Chapter 16 백업 및 복구 Solaris 2 . ufsdump 와 ufsrestore
 13장. 배시쉘 프로그래밍.
[beginning] Linux & vi editor
제5장 제어명령
Linux 9.X 기초에서 활용까지 Chapter 09 쉘(Shell).
UNIX Unbounded A Beginning Approach
JavaScript.
UNIX Unbounded A Beginning Approach
7. while 문의 흐름 제어.
Linux/UNIX Programming
Shell Programming Concept of the Shell Environment of Shell
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
정보검색 환경세팅 및 쉘스크립트 맛보기 IS lab. 김건영.
C언어 프로그래밍의 이해 Ch05. 명령문 Phylogenetic: 계통, 발생(학)의.
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
-제어문, 함수, 클래스- IS lab. 김건영 Python -제어문, 함수, 클래스- IS lab. 김건영
기본 셸로는 Bash 셸을 사용하라. 하지만 스트립트를 실행하기 위해서는 Bourne 셸을 사용하라.
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
제4장 유닉스 쉘 숙명여대 창병모 2011 가을.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
[INA240] Data Structures and Practice
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
4장 서버 구축을 위해 알아야 할 핵심 개념과 명령어
제어문 & 반복문 C스터디 2주차.
4장 - PHP의 표현식과 흐름 제어-.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
제 5장 변수, 바인딩, 식 및 제어문 5.1 변수 5.6 표현식 5.2 바인딩 5.7 조건문 5.3 선언 5.8 반복문
Linux/UNIX Programming
[INA470] Java Programming Youn-Hee Han
6장 콘 셸 뇌를 자극하는 Solaris Bible.
자바 5.0 프로그래밍.
Chapter 12. String 클래스의 디자인
U N I X 창원대학교 전자계산학과 김병찬.
어린이집.
C언어 프로그래밍의 이해 Ch05. 명령문.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 26. 매크로와 선행처리기.
시스템 인터페이스 Lab#5 쉘 실습.
타인을 내편으로 만드는 12가지 방법 고객서비스팀.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 08. 조건에 따른 흐름의 분기.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
1학기 정리 지난 학기에 배운 내용을 복습해 본다..
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
제4장 유닉스 쉘 숙명여대 창병모
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
제8장 C 쉘 창병모
대림대학교 2017년도 1학기 강의 왕보현 순서도와 스크래치 6주차 대림대학교 2017년도 1학기 강의 왕보현
어서와 C언어는 처음이지 제16장.
Lecture 03 제어문과 메소드 Kwang-Man Ko
13. 词的来源 1. 基本词 2. 来源分类 2.1. 传承词 2.2. 古语词 2.3. 方言词 2.4. 外来词 2.5. 新词.
PHP 기초문법 PHP를 공부하는데 있어 가장 기초가 되는 PHP기초문법에 대해서 배워 봅니다.
Linux/UNIX Programming
Intelligent software Lab. 전재원
Presentation transcript:

7장. 셸 스크립트 프로그래밍

CentOS의 bash 셸 [p410] 기본 셸은 bash(Bourne Again SHell : ‘배시 셸’) •Alias 기능(명령어 단축 기능) •History 기능(위/아래 화살표키) •연산 기능 •Job Control 기능 •자동 이름 완성 기능(탭키) •프롬프트 제어 기능 •명령 편집 기능 셸의 명령문 처리 방법 (프롬프트) 명령어 [옵션…] [인자…] 예) # rm -rf /mydir

환경 변수 [p411] “echo $환경변수이름” 으로 확인 가능 “export 환경변수=값” 으로 환경 변수의 값을 변경 주요 환경변수

셸 스크립트 프로그래밍 [p412] C언어와 유사하게 프로그래밍이 가능 변수, 반복문, 제어문 등의 사용이 가능 별도로 컴파일하지 않고 텍스트 파일 형태로 바로 실행 vi나 gedit으로 작성이 가능 리눅스의 많은 부분이 셸 스크립트로 작성되어 있음

셸 스크립트의 작성과 실행 [p412~p414] vi나 gedit으로 작성 실행 방법 “sh <스크립트 파일>”로 실행 “chmod +x <스크립트 파일>” 명령으로 실행 가능 속성으로 변 경한 후에, “./<스크립트파일>”명령으로 실행 셸 스크립트 파일의 확장명은 되도록 *.sh로 주는 것이 좋다. 셸 스크립트 파일을 /usr/local/bin/ 디렉토리에 복사하고, 속성을 755로 변경해 주면 모든 사용자가 스크립트를 사용할 수 있다. 이 작업은 보안상 root만 수행함

변수의 기본 [p415] 변수를 사용하기 전에 미리 선언하지 않으며, 변수에 처 음 값이 할당되면서 자동으로 변수가 생성 모든 변수는 ‘문자열(String)’로 취급 변수 이름은 대소문자를 구분 변수를 대입할 때 ‘=’좌우에는 공백이 없어야 함

변수의 입력과 출력 [p416] ‘$’ 문자가 들어간 글자를 출력하려면 ‘ ’로 묶어주거나 앞에 ‘\’를 붙임. ‘$’ 문자가 들어간 글자를 출력하려면 ‘ ’로 묶어주거나 앞에 ‘\’를 붙임. “ ”로 변수를 묶어줘도 된다. 01 #!/bin/sh 02 myvar="Hi Woo" 03 echo $myvar 04 echo "$myvar" 05 echo '$myvar' 06 echo \$myvar 07 echo 값 입력 : 08 read myvar 09 echo '$myvar' = $myvar 10 exit 0

숫자 계산 [p417] 변수에 대입된 값은 모두 문자열로 취급 변수에 들어 있는 값을 숫자로 해서 +, -, *, / 등의 연산을 하 려면 expr을 사용 수식에 괄호 또는 곱하기(*)는 그 앞에 꼭 역슬래쉬(\) 붙임 01 #!/bin/sh 02 num1=100 03 num2=$num1+200 04 echo $num2 05 num3='expr $num1 + 200' 06 echo $num3 07 num4='expr \($num1 + 200 \) / 10 \* 2' 08 echo $num4' 09 exit 0

파라미터(Parameter) 변수 [p418] 파라미터 변수는 $0, $1, $2…의 형태를 가짐 전체 파라미터는 $*로 표현 예) 01 #!/bin/sh 02 echo "실행파일 이름은 <$0>이다" 03 echo "첫번째 파라미터는 <$1>이고, 두번째 파라미터는 <$2>다" 04 echo "전체 파라미터는 <$*>다" 05 exit 0

기본 if 문 [p419] 형식 if [ 조건 ] then 참일 경우 실행 fi 01 #!/bin/sh 02 if [ "woo" = "woo" ] 03 then 04 echo "참입니다" 05 fi 06 exit 0 “[ 조건 ]”의 사이의 각 단어에는 모두 공백이 있어야 한다

if~else 문 [p420] 형식 01 #!/bin/sh 02 if [ "woo" != "woo" ] 03 then 참일 경우 실행 else 거짓인 경우 실행 fi 01 #!/bin/sh 02 if [ "woo" != "woo" ] 03 then 04 echo "참입니다" 05 else 06 echo "거짓입니다" 07 fi 08 exit 0 중복 if 문을 위해서 else if가 합쳐진 elif문도 사용할 수 있다.

조건문에 들어가는 비교 연산자 [p421] 01 #!/bin/sh 02 if [ 100 -eq 200 ] 03 then 04 echo "100과 200은 같다." 05 else 06 echo "100과 200은 다르다." 07 fi 08 exit 0

파일과 관련된 조건 [p422] 01 #!/bin/sh 02 fname=/lib/systemd /system/httpd.service 03 if [ -f $fname ] 04 then 05 head -5 $fname 06 else 07 echo "웹 서버가 설치되지 않았습니다." 08 fi 09 exit 0

case~esac 문 (1) [p423] if 문은 참과 거짓의 두 경우만 사용 (2중분기) 01 #!/bin/sh 02 case "$1" in 03 start) 04 echo "시작~~";; 05 stop) 06 echo "중지~~";; 07 restart) 08 echo "다시 시작~~";; 09 *) 10 echo "뭔지 모름~~";; 11 esac 12 exit 0

case~esac 문 (2) [p424] 01 #!/bin/sh 02 echo "리눅스가 재미있나요? (yes / no)" 03 read answer 04 case $answer in 05 yes | y | Y | Yes | YES) 06 echo "다행입니다." 07 echo "더욱 열심히 하세요 ^^";; 08 [nN]*) 09 echo "안타깝네요. ㅠㅠ";; 10 *) 11 echo "yes 아니면 no만 입력했어야죠" 12 exit 1;; 13 esac 14 exit 0

AND, OR 관계 연산자 [p425] and는 ‘-a’ 또는 ‘&&’를 사용 or는 ‘-o’ 또는 ‘||’를 사용 01 #!/bin/sh 02 echo "보고 싶은 파일명을 입력하세요." 03 read fname 04 if [ -f $fname ] && [ -s $fname ] ; then 05 head -5 $fname 06 else 07 echo "파일이 없거나, 크기가 0입니다." 08 fi 09 exit 0

반복문 – for문 (1) [p426] 형식 for 변수 in 값1 값2 값3 … do 반복할 문장 done 01 #!/bin/sh 02 hap=0 03 for i in 1 2 3 4 5 6 7 8 9 10 04 do 05 hap='expr $hap + $i' 06 done 07 echo "1부터 10까지의 합: "$hap 08 exit 0 3행은 for((i=1;i<=10;i++)) 또는 for i in ‘seq 1 10’ 로 변경 할 수 있음

반복문 – for문 (2) [p427] 현재 디렉터리에 있는 셸 스크립트 파일(*.sh)의 파일명 과 앞 3줄을 출력하는 프로그램 01 #!/bin/sh 02 for fname in $(ls *.sh) 03 do 04 echo "--------$fname-------" 05 head -3 $fname 06 done 07 exit 0

반복문 – while문 (1) [p428] 조건식이 참인 동안에 계속 반복 01 #!/bin/sh 02 while [ 1 ] 03 do 04 echo “CentOS 7" 05 done 06 exit 0 [ 1 ] 또는 [ : ]가 오면 항상 참이 됨. 그러므로 4행을 무한 루프로 반복함.

반복문 – while문 (2) [p429] 1에서 10까지의 합계를 출력 (‘반복문 – for문 (1)’ 슬라 이드와 동일) 01 #!/bin/sh 02 hap=0 03 i=1 04 while [ $i -le 10 ] 05 do 06 hap='expr $hap + $i' 07 i='expr $i + 1' 08 done 09 echo "1부터 10까지의 합 : "$hap 10 exit 0 until 문은 조건식이 참일 때까지(= 거짓인 동안) 계속 반복 4행을 until 문으로 바꾸면, until [ $i -gt 10 ]

반복문 – while문 (3) [p430] 비밀번호를 입력받고, 비밀번호가 맞을 때까지 계속 입 력받는 스크립트 01 #!/bin/sh 02 echo "비밀번호를 입력하세요." 03 read mypass 04 while [ $mypass != "1234" ] 05 do 06 echo "틀렸음. 다시 입력하세요." 07 read mypass 08 done 09 echo "통과~~" 10 exit 0

until 문 [p430] while문과 용도가 거의 같지만, until문은 조건식이 참일 때까지(=거짓인 동안) 계속 반복한다. while2.sh를 동일한 용도로 until문으로 바꾸려면 4행을 다음과 같이 바꾸면 된다. until [ $i -gt 10 ]

break, continue, exit, return 문 [p431] 01 #!/bin/sh 02 echo "무한반복 입력을 시작합니다(b: break, c: continue, e: exit)" 03 while [ 1 ] ; do 04 read input 05 case $input in 06 b | B ) 07 break ;; 08 c | C ) 09 echo "continue를 누르면 while의 조건으로 돌아감" 10 continue ;; 11 e | E ) 12 echo "exit를 누르면 프로그램(함수)를 완전히 종료함" 13 exit 1 ;; 14 esac; 15 done 16 echo "break를 누르면 while을 빠져나와 지금 이 문장이 출력됨." 17 exit 0

사용자 정의 함수 [p432] 형식 함수이름 ( ) { → 함수를 정의 내용들… } 함수이름 → 함수를 호출 01 #!/bin/sh 02 myFunction () { 03 echo "함수 안으로 들어 왔음" 04 return 05 } 06 echo "프로그램을 시작합니다." 07 myFunction 08 echo "프로그램을 종료합니다." 09 exit 0

함수의 파라미터 사용 [p433] 형식 함수이름 ( ) { → 함수를 정의 $1, $2 … 등을 사용 } 함수이름 파라미터1 파라미터2 … → 함수를 호출 01 #!/bin/sh 02 hap () { 03 echo 'expr $1 + $2' 04 } 05 echo "10 더하기 20을 실행합니다" 06 hap 10 20 07 exit 0

eval [p434] 문자열을 명령문으로 인식하고 실행 01 #!/bin/sh 02 str="ls -l anaconda-ks.cfg" 03 echo $str 04 eval $str 05 exit 0

export [p434] 외부 변수로 선언해 준다. 즉, 선언한 변수를 다른 프로그램에 서도 사용할 수 있도록 해줌 exp1.sh 01 #!/bin/sh 02 echo $var1 03 echo $var2 04 exit 0 exp2.sh 02 var1="지역 변수" 03 export var2="외부 변수" 04 sh exp1.sh 05 exit 0

printf [p435] C언어의 printf() 함수와 비슷하게 형식을 지정해서 출력 01 #!/bin/sh 02 var1=100.5 03 var2="재미있는 리눅스~~" 04 printf "%5.2f \n\n \t %s \n" $var1 "$var2" 05 exit

set과 $(명령어) [p436] 리눅스 명령어를 결과로 사용하기 위해서는 $(명령어) 형식을 사용 리눅스 명령어를 결과로 사용하기 위해서는 $(명령어) 형식을 사용 결과를 파라미터로 사용하고자 할 때는 set과 함께 사용 01 #!/bin/sh 02 echo "오늘 날짜는 $(date) 입니다." 03 set $(date) 04 echo "오늘은 $4 요일 입니다." 05 exit 0

shift (1) [p437] 파라미터 변수를 왼쪽으로 한 단계씩 아래로 쉬프트시킴 10개가 넘는 파라미터 변수에 접근할 때 사용 단, $0 파라미터 변수는 변경되지 않음 원하지 않는 결과의 소스 01 #!/bin/sh 02 myfunc () { 03 echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 04 } 05 myfunc AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK 06 exit 0

shift (2) [p438] shift 사용을 통한 앞 문제점을 해결 01 #!/bin/sh 02 myfunc() { 03 str="" 04 while [ "$1" != "" ] ; do 05 str="$str $1" 06 shift 07 done 08 echo $str 09 } 10 myfunc AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK 11 exit 0