Content Shell 이란? Redirection & Pipes Shell Programming 변수 조건 프로그램제어 리스트 함수 Shell 에내장된명령 Here documents Page 2

Similar documents
<4D F736F F F696E74202D20BFEEBFB5C3BCC1A6BDC7BDC D31C7D0B1E229202D20BDA92E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 02-Shell-Programming

Microsoft PowerPoint UNIX Shell.ppt

Microsoft PowerPoint UNIX Shell.pptx

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

Microsoft PowerPoint - comp_prac_081223_2.pptx

Microsoft Word - Lab_080104A.docx

Microsoft PowerPoint - u5.pptx

Microsoft PowerPoint - u5.pptx

Visual Basic 반복문

1 Shell script What the shell?

Linux SHELL

PowerPoint 프레젠테이션

슬라이드 1

/chroot/lib/ /chroot/etc/

chap2

6주차.key

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

<BBE7B6FBB9E B0A1C0BBC0DBBEF7C1DF2E696E6464>

PowerPoint 프레젠테이션

제1장 Unix란 무엇인가?

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Tcl의 문법

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Linux SHELL

PowerPoint 프레젠테이션

문서의 제목 나눔고딕B, 54pt

untitled

ksh프로그램문법.ppt

Adobe Flash 취약점 분석 (CVE )

Chapter_06

윈도우즈프로그래밍(1)

PowerPoint 프레젠테이션

C 프로그램의 기본

PowerPoint 프레젠테이션

[ 컴퓨터시스템 ] 3 주차 1 차시. 디렉토리사이의이동 3 주차 1 차시디렉토리사이의이동 학습목표 1. pwd 명령을사용하여현재디렉토리를확인할수있다. 2. cd 명령을사용하여다른디렉토리로이동할수있다. 3. ls 명령을사용하여디렉토리내의파일목록을옵션에따라다양하게확인할수

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 05_(Linux)_(Fundamental)_Shell_Programming

PowerPoint 프레젠테이션

Microsoft PowerPoint - u6.pptx

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

슬라이드 1

Microsoft PowerPoint - 게시물2 - unix07.ppt [호환 모드]

Microsoft PowerPoint 웹 연동 기술.pptx

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

PowerPoint Presentation

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

Microsoft PowerPoint - [2009] 02.pptx

Java ...

제2장 리눅스 사용

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

제2장 유닉스 사용

01Àå

OCW_C언어 기초

MySQL-.. 1

금오공대 컴퓨터공학전공 강의자료

PowerPoint Presentation

Microsoft PowerPoint 통신 및 압축 명령어.ppt

untitled

<4D F736F F D20C0CCBEBEC1A6BEEE5FC3A5BCD2B0B35F >

PowerPoint 프레젠테이션

Microsoft PowerPoint - u3.ppt [호환 모드]

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다. / /bin/ /home/ /home/taesoo/ /home/taesoo/downloads /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자 (t

사용자계정관리 1. 사용자계정관리 사용자 (user), 그룹 (group) u 다중사용자시스템 (Multi-User System) - 1 대의시스템을동시에여러사람이접속하여쓸수있게하는시스템 u 사용자 (user) - 시스템관리자 : root (=Super user) -

What is Unix? A multi-task and multi-user Operating System Developed in 1969 at AT&T s Bell Labs by Ken Thompson (Unix) Dennis Ritchie (C) Douglas Mcl

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Presentation

Mango-AM335x LCD Type 커널 Module Parameter에서 변경하기

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다고가정하자. / /bin/ /home/ /home/taesoo/ /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자가터미널에서다음 ls 명령입력시화면출력

LXR 설치 및 사용법.doc


PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Contents Activity Define Real s Activity Define Reports UI, and Storyboards Activity Refine System Architecture Activity Defin

MySQL-Ch10

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

OnTuneV3_Agent_Install

INDEX 1. 개요 데이터백업스크립트작성 crontab 을이용한자동백업예약 활용 - 다른서버에백업하기

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

Microsoft PowerPoint - e pptx

PowerPoint Template

Module 4 Active Directory Domain Services 관리자동화

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

단계

Infinity(∞) Strategy

C# Programming Guide - Types

PowerPoint 프레젠테이션

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint 프레젠테이션

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

휠세미나3 ver0.4

chap7.key

Microsoft PowerPoint - 04_UsingShell

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

PowerPoint 프레젠테이션

Transcription:

SHELL programming

Content Shell 이란? Redirection & Pipes Shell Programming 변수 조건 프로그램제어 리스트 함수 Shell 에내장된명령 Here documents Page 2

Shell 이란? User 와 UNIX(Linux) 사이의인터페이스로작동하는프로그램. 사용자는 shell 을통하여 OS 가실행할명령을입력 Windows(command 환경 ) 의명령프로프트와비슷 [ue20@zeus ~]$ vs. C:\windows>_ 대부분의 shell 들은 Bourne shell 로부터파생됨 bash, csh, sh(bourne) shell etc. Shell 은두가지역할을한다. 명령어처리기 고급프로그래밍언어 [ 실습 1] 현재사용중인 bash 쉘의버전확인 [ue20@zeus ~]$ /bin/bash --version Page 3

Redirection & Pipes File Descriptor Process 가 File 이나 Device 를 access 하기위해사용 Standard File Descriptor stdin(0) : 표준입력 ( 예, 키보드 ) stdout(1) : 표준출력 ( 예, 모니터 ) stderr(2) : 표준에러출력 ( 예, 에러메시지 ) Redirection 출력재지정 입력재지정 >, >> (stdout 을파일로저장또는추가 ) < ( 파일을 stdin 으로전달 ) Pipe ( ) Process 연결 (stdout 을 stdin 으로전달 ) Process 간의데이터흐름은자동으로조절됨 Page 4

Redirection & Pipe 실습 현재위치에서다음과 같같이입력 ps 명령어 : 시스템내에서현재진행중인프로세서를보여준다. [ue20@zeus ch2]$ ls al > lsoutput.txt [ue20@zeus ch2]$ more lsoutput.txt more 또는 cat 명령어를통해 lsoutput.txt 내용을확인 [ue20@zeus ch2]$ more < lsoutput.txt [ue20@zeus ch2]$ ps >> lsoutput.txt [ue20@zeus ch2]$ more lsoutput.txt vim lsoutput.txt 내용 more( 또는 cat) lsoutput.txt 내용 Page 5

Redirection & Pipe 실습 여러파일검색 Pipe find. -iname *.txt xargs grep asdf $ cal > foo $ cat /dev/zero > foo $ cat < /etc/passwd $ who cut -d' ' -f1-4 sort uniq wc l backtick $ echo The date is `date` $ echo `seq 1 10` Hard, soft (symbolic) link ln vmlinuz-2.6.24.4 vmlinuz ln -s firefox-2.0.0.3 firefox

Shell Programming Shell Programming 두가지방법 명령을차례 (line command) 로입력하고 Shell 이대화형으로실행 하나의스크립트작성후프로그램처럼사용 Script 작성 실행파일로만들기 실행 [ue20@zeus ch2]$ for file in * > do > if grep l ps $file > then > more $file > fi > done Page 7 예 1. Line command 줄바꿈위치중요! 줄바꿈대신 ; 사용가능 예 2. Script 를이용 [ue20@zeus ch2]$ vi first #!/bin/bash for file in * do if grep -l ps $file then echo $file fi done exit 0 [ 실행 ]$ /bin/sh first

Python version : test.py #!/usr/bin/python import os import subprocess as sp for filen in os.listdir("."): if sp.call("grep l ps '"+filen+"'>/dev/null", shell=true)==0: print(filen) 들여쓰기중요! 들여쓰기시탭또는스페이스여러개사용할수있는데, 코드전체에서방식을하나로통일해야함 #!/usr/bin/python import os import subprocess print(subprocess.check_output( ls l, shell=true) os.system( ls l ) Page 8

Shell 문법 변수 : 문자열, 숫자, 환경, 매개변수 조건 : 쉘부울 (Boolean) 프로그램제어 : if, elif, for, while, until, case 리스트 함수 쉘에내장된명령 명령의결과가져오기 Page 9

Shell 변수 Shell 변수 Shell 에서변수는사용할때선언 변수에초기값을대입할때변수를만들게된다 모든변수는문자열로간주한다. 숫자값을가지는경우에도문자열로간주된다. 변수는대소문자를구분한다. ( 리눅스시스템특성 ) 변수에값이부여될때를제외하고, 변수를사용할경우변수앞에 $ 의표시를붙여야한다. 변수에부여된값은 echo 명령을통해확인가능. 변수에저장될문자열값중빈칸을포함하고있다면 을이용하여값을부여한다. Page 10

쉘변수실습 실습 4. 명령줄 (command line) 에변수에같값을설정하고 each 로확인하기 [ue20@zeus ch2]$ VAR=Hello 값을설정할때띄워쓰면에러발생 [ue20@zeus ch2]$ echo $VAR Hello [ue20@zeus ch2]$var= Hello Hanyang Univ [ue20@zeus ch2]$ echo $VAR Hello Hanyang Univ Page 11

쉘변수실습 실습 5. 스크립트를작성해서다양한출력형태확인 [ue20@zeus ch2]$ vi var_example.sh myvar= Hi Hanyang Univ echo $myvar echo $myvar echo $myvar echo \$myvar echo Enter some text read myvar echo $myvar now equals $myvar exit 0 Page 12

Python version #!/usr/bin/python import os print(os.getenv( HOME )) Print Enter some text myvar=raw_input() print(myvar) Page 13

Shell 환경변수 Shell 의환경변수 Shell Script 가시작될때일부의변수는환경의값을통해초기화되는데, 이를환경변수라한다. 사용자정의 ( 쉘 ) 변수와구분하기위해보통대문자로선언 환경변수는각사용자환경에따라값이다르다. Page 14 환경변수 $HOME $PATH 설명 현재사용자의홈디렉토리 명령을검색하는디렉토리들의목록, : 으로구분된다 $PS1 대개 $ 인명령프롬프트 $PS2 추같적인입력을요구할때사용되는 2 차프롬프트, 주로 > 이다. $IFS 입력필드구분자. Shell 이입력을받아들일때단어를구분하는데사용되는문자의목록으로, 대개빈칸, 탭, 새줄문자이다. $0 Shell Script 의이름 $# 전달된파라미터의수 $$ /tmp/tmpfile_$$ 와같같이종종독특한임시파일이름을생성하기위해 Script 에서사용되는 Shell Script 의프로세스 ID

Shell 환경변수실습 실습 6. 환경변수이해하기 [ue20@zeus ch2]$ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin/:/usr/bin:/usr/x11r6/bin:/home/ue20/bin [ue20@zeus ch2]$ echo $HOME /home/ue20 [ue20@zeus ch2]$ cat ~/.bashrc #Get the aliases and functions if [ -f ~/.bash_aliases ]; then ~/.bash_aliases fi #User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH [ue20@zeus ch2]$ Page 15

Python script 에서 bash 로환경변수 export 는불가능함 ( 단, bash script 와 python script 를동시에사용하면가능 ) Page 16

Shell 파라미터변수 Shell 의파라미터변수 Script 가파라미터를통해호출된다면몇가지추가적인변수가생성되는데이를파라미터변수라한다. 파라미터변수 설명 $1, $2,.. Script 에주어진파라미터 $* 환경변수 IFS 의첫문자로구분되고, 하나의변수에저장되는모든파라미터의목록 $@ IFS 환경변수를사용하지않는 $* 에대한변형 Page 17

Shell 파라미터변수 파라미터변수실습 Shell 상태에서다음과같이명령을실행한다. $IFS=h # 환경변수 IFS 를 h 로초기화한다. $set foo bar bam # 파라미터설정. $echo $@ $echo "$@" $echo $* $echo "$*" $unset IFS $echo $@ $echo $* $echo "$@" $echo "$*" Page 18

Shell 파라미터변수실습 실습 7. 매개변수와환경변수 [ue20@zeus ch2]$ vim vitry_var.sh salutation= Hello echo $salutation echo The Program $0 is now running echo The Second parameter was $2 echo The First parameter was $1 echo The user s home directory is $HOME echo Please enter a new greeting read salutation echo $salutation echo The script is now complete exit 0 Page 19

Shell 파라미터변수실습 실습 7. 매개변수와환경변수결과확인 사용자입력 사용자작성스크립트 chmod 명령을통해권한변경후수행같능하게만들기 [ue20@zeus ch2]$ ls -l [ue20@zeus ch2]$ chmod +x vitry_var.sh [ue20@zeus ch2]$ ls l [ue20@zeus ch2]$./vitry_var.sh Hanyang Univ. Page 20

Python 파라미터변수실습 #!/usr/bin/python import os,sys,string print(sys.argv) print(len(sys.argv)) try: print(string.join(sys.argv, ' ')) print('a') print(sys.argv[0]) print(sys.argv[1]) print(sys.argv[2]) os.system('ls') except Exception: pass Page 21

Shell 조건문 Shell Bool 형확인기능 [], test test, [] 는어떤표현식이나파일에대해산술비교스트링비교, 파일조건등을확인하고그에대해참또는거짓의값을리턴 예 ) 파일의존재유무를확인하는 test 명령사용법 : test f <filename> 조건형식 방법 1. 기본형 if test f fred.c then fi 방법 2. 축약형 if [ -f fred.c] then fi 문자열비교, 산술비교, 파일조건 (p79 ~ 80 table 참고 ) Page 22

Shell 제어구조 If 명령의결과를테스트하고조건부로구문의그룹을실행한다. If 구문 if condition then statements else Statements fi Page 23

If 조건문실습 실습 8. 간단한 if 조건문사용 [ue20@zeus ch2]$ vim ch2_if.sh #!/bin/sh echo Is it morning? Please answer yes or no read timeofday if [ $timeofday = yes ]; then echo Good morning else echo Good afternoon fi exit 0 Page 24 user input

elif 조건문실습 실습 9. elif 를사용하여더많은검사를수행하기 [ue20@zeus ch2]$ vim ch2_ex_if.sh #!/bin/sh echo Is it morning? Please answer yes or no read timeofday if [ $timeofday = yes ];then echo Good morning elif [ $timeofday= no ];then echo Good afternoon else echo Sorry, $timeofday not recognized. Enter yes or no exit 1 fi Page 25

Shell 제어구조 For 값의범위에대한반복문수행 값의범위는문자열의집합도가능 For 구문 for variable in values do statements done Page 26

for 반복분실습 실습 10. 고정된문자열을사용하는 for 반복문 [ue20@zeus ch2]$ vim ch2_for.sh #!/bin/sh for foo in bar fud 43 do echo $foo done exit 0 [ue20@zeus ch2]$ vim ch2_for1.sh #!/bin/sh for foo in bar fud 43 do echo $foo done exit 0 변수 foo 를만들고 for 반복문이매번실행할때마다다른같값이대입된다. 따라서위의두예제결과같다름을알수있을것이다. Page 27

for 반복분실습 실습 11. 와일드카드 (*) 확장을사용하는 for 반복문 [ue20@zeus ch2]$ vim ch2_wfor.sh for file in $(ls c*.sh) do echo $file done exit 0 values 같값으로 $(command) 을이용하여, 변수명 ( 여기서는 file) 은 $(ls c*.sh) 에포함된명령의출력같값을이용한다. 즉, 현재디렉토리내의 c 로시작하고확장자같 sh 로끝나는 (c*.sh) 모든파일을입력으로해서 echo $file 출력을한다. Page 28

The previous script is buggy! ( 파일이름에공백이있는경우 ) 대신아래문장사용 : for file in c*.sh Python: import glob for fname in glob.glob( c*.sh ): Page 29

Shell 제어구조 For 문 모든 shell 변수가기본적으로문자열로인식하기때문에, for 반복문은문자열집합에대해반복문을수행하기에편리 하지만, 정해진횟수만큼명령을실행할수없음 ( 또는외부명령 seq 등이필요 ) #!/bin/sh for foo in 1 2 3 4 5 6 7 8 9 10 11 12 do echo here we go again done exit 0 while 구문 while condition do statements done Page 30

while 문실습 실습 12. while 문을이용한간단한 password 확인프로그램작성 [ue20@zeus ch2]$ vim ch2_pass_while.sh #!/bin/sh echo Enter password read pass while [ $pass!=kokoro ]; do echo Sorry, try again.. read pass done exit -0 user input Page 31

while 문실습 실습 13. 정해진횟수만큼실행해보기 [ue20@zeus ch2]$ vim ch2_count_while.sh #!/bin/sh foo=1 while [ $foo le 5 ] do echo Here we go again foo=$(($foo+1)) done exit 0 [ Expression1 le Expression2 ] exp1 Page 32 이 exp2 보다작거나같같을때까지반복한다

Shell 제어구조 until 구문 until condition do statements done Page 33

Shell 제어구조 [ue20@zeus ch2]$ vim until2.sh #!/bin/sh until who grep $1 > /dev/null do sleep 10 done echo e \\a echo $1 has just logged in exit 0 현재로그인된 user 검색명령어 첫번째파라미터 Page 34

Python version #!/usr/bin/python import subprocess as sp import time while sp.call('who grep "'+sys.argv[1]+'"', shell=true)==1: time.sleep(10) print(sys.argv[1]+" has just logged in") Page 35

Shell 제어구조 Case 구문 case variable in Page 36 esac pattern [ pattern ]...) statements;; pattern [ pattern ]...) statements;;... #!/bin/sh echo Is it morning? Please answer yes or no read timeofday case $timeofday in yes y Yes YES ) echo Good Morning ;; [nn]* ) echo Good Afternoon ;; * ) echo Sorry exit 1;; esac [ue20@zeus ch2]$

Quiz 다음작업을하는 shell program 을작성한다. 1. Creating 1000 files $./create1000files.sh - ~/test/ 디렉토리에 1.txt, 2.txt,, 1000.txt 파일을생성함. 빈파일이생성됨. 참고 : $ touch 1.c //1.c 파일이생성됨. 2. 임의의실행파일이설치되어있는폴더를 echo 하는프로그램예 : $./find.sh bash /bin/ 참고 : whereis bash 명령과 cut 명령, echo 명령, backtick 등을사용하여구현가능 ( 파이프를사용해서한줄로도가능 ) 3. CPU 의코어개수를 echo 하는한줄 bash 스크립트 (/proc/cpuinfo 텍스트파일참고 ) Page 37

Reference KLDP Shell Programming 의기본 http://wiki.kldp.org/wiki.php/docbooksgml/shell_programming-trans 초보자용 Shell Programming http://www.softintegration.com/docs/ch/shell/ Page 38