1 / 81

Shell Part 2

Shell Part 2. http://rainbow.sunmoon.ac.kr/~yypark http://ubilab.sunmoon.ac.kr. 배시 쉘 프로그래밍 ( 기본 ). 쉘 스크립트. 명령어가 명령행에서가 아니라 파일 안에서 실행될 때 , 이 파일을 쉘 스크립트라 함 대화형 기능으로 동작하지 않음 BASH_ENV 환경변수에서 지정한 파일 (‘BASH_ENV 파일’ ) 을 실행함 (.bashrc) 이러한 BASH_ENV 파일을 읽어들인 후 , 쉘은 스크립트 안의 명령어들을 실행.

kiona-burke
Télécharger la présentation

Shell Part 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Shell Part 2 http://rainbow.sunmoon.ac.kr/~yypark http://ubilab.sunmoon.ac.kr

  2. 배시 쉘 프로그래밍 (기본)

  3. 쉘 스크립트 • 명령어가 명령행에서가 아니라 파일 안에서 실행될 때, 이 파일을 쉘 스크립트라 함 • 대화형 기능으로 동작하지 않음 • BASH_ENV 환경변수에서 지정한 파일(‘BASH_ENV 파일’)을 실행함 (.bashrc) • 이러한 BASH_ENV 파일을 읽어들인 후, 쉘은 스크립트 안의 명령어들을 실행 3

  4. 쉘 스크립트 작성절차 • 일반적으로 편집기에서 작성(vi, gedit 등) • 주석(‘#’ 기호)과 명령어로 구성 • 첫 번째 행 • 배시 쉘 프로그램 • 유닉스 명령어, 본 쉘 명령어, 프로그램 구조, 주석 등으로 이루어짐 #!/bin/bash : 항상 스크립트의 첫 행에 나와야 함 : 스크립트를 수행할 때 사용할 쉘의 이름을 지정 : 기호 ‘#!’는 매직넘버라 불림. 커널이 실행 프로그 램으로 인식해야 하는지의 여부를 나타냄 4

  5. 쉘 스크립트 실행권한 부여 • 파일 생성 후 적절한 권한이 주어져야 쉘 스크립트 실행이 가능함 5

  6. 쉘 스크립트 수행 간단한예제 • 스크립트 작성하기 (greetings) 6

  7. 쉘 스크립트 수행 간단한예제(Cont’d) • 스크립트 실행하기 (greetings) 7

  8. 내장명령어 ‘read’ • 파일이나 터미널로부터 입력을 읽어오기 위함 • 개행문자(\n)가 나타날 때 까지 행을 읽어들임 • 사용자가 엔터키를 입력할 때까지 프로그램을 일시 중지시키는 목적으로도 사용함 8

  9. 내장명령어 ‘read’ 예제 • 스크립트 작성하기 (nosy) 9

  10. 내장명령어 ‘read’ 예제(Cont’d) • 스크립트 실행하기 (nosy) 10

  11. # declare –i 명령어를 사용하여 num 변수를 정수 타입으로 선언 # 문자열 hello를 정수타입 변수 num에 대입하려고 하면 대신 0의 값이 num 변수에 지정됨 # 스페이스는 사용하지 않거나 따옴표로 묶어야 함 # 스페이스를 따옴표로 묶었으므로 곱셈이 수행됨 # 변수가 정수타입이므로 부동소수점을 지정하면 구문에러발생 산술연산(정수타입계산) • ‘declare’ 명령어 (declare –i 사용) 11

  12. # i 변수에 5를 저장 # let명령어가 i 변수에 1을 더함. 산술연산에서는 변수 치환을 위해 ‘$’를 사용할 필요가 없음 # 인자들에 스페이스가 있으면 따옴표를 사용 # 복합연산자 +=를 사용하여 i 변수에 1을 더함 # let명령어 대신 (( )) 명령어를 사용할수 있음 산술연산(정수타입계산) • ‘let’ 명령어 12

  13. 산술연산(부동소수점타입계산) • 배시 쉘은 기본적으로 정수타입만 계산 • bc, awk 등의 유틸리티를 사용하여 복잡한 계산 수행 13

  14. 위치 인자 • 스크립트 이름 다음에 공백 문자로 구분된 각 단어를 인자라 부름 • 명령행에서 스크립트에 필요한 정보를 넘겨줄 수 있음 • 명령어 ‘set’을 써서 설정 또는 재설정할 수 있고 이때 이전 설정 값은 지워짐 14

  15. 위치 인자 예제 • 스크립트 작성하기 (greetings2) 15

  16. 위치 인자 예제(cont’d) • 스크립트 실행하기 (greetings2) 16

  17. ‘set’ 명령어와 위치 인자 예제 • 스크립트 작성하기 (args) 17

  18. ‘set’ 명령어와 위치 인자 예제(Cont’d) • 스크립트 실행하기 (args) 18

  19. # grep명령어의 종료상태가 성공적으로 수행했으므로 0이 된다 # test명령어는 문자열이나 숫자를 평가하거나, 파일을 검사하기 위해 사용. 0을 반환하면 표현식을 참으로 평가, 1이면 거짓임. 등호(=)기호 좌우에는 스페이스 삽입. # 대괄호를 test명령어 대신 사용할 수 있음 # test명령어에서는 와일드카드를 사용할 수 없음 # $x가 $y보다 큰지(-gt) 검사함. 0이면 참, 1이면 거짓 # $x가 $y보다 작거나 같은지(-le) 검사함. 0이면 참, 1이면 거짓 내장명령어 ‘test’ • 표현식의 평가에 일반적으로 사용 19

  20. 형식 형식 if 명령어 then 명령어 명령어 fi (문자열에 대해 test 사용 – new 형식) if [[ 문자열 조건식 ]] then 명령어 fi (숫자 및 문자열에 대해 test 사용 – old) if test조건식 then 명령어 fi (또는) if [ 문자열/수식 ] then 명령어 fi (숫자에 대해 let 사용 – new 형식) if (( 수식 )) ‘if’ 명령어 • 조건을 표현하기 위한 가장 간단한 형태 20

  21. # ‘grep’명령어가 /etc/passwd 데이터베이스에서 변수 name을 찾는다. 표준 출력과 표준 에러는 /dev/null로 리다이렉션 됨 # ‘grep’명령어의 종료 상태가 0이면, then 에서부터 fi를 만날 때까지 나오는 문장들을 실행한다. # fi는 then다음에 나오는 명령어 목록의 끝을 의미한다. ‘if’ 명령어 예제 21

  22. ‘exit’ 명령어와 ‘?’ 변수 • ‘exit’명령어는 스크립트를 중지시키고 명령행으로 돌아가고자 할 때 사용함 • 특정 상황이 발생한 탓에 스크립트를 종료시켜야 할 경우 주로 사용 • 인자는 0~255 사이의 숫자 사용 가능 • 인자값 0 : 프로그램이 성공적인 수행을 마침 • 0이외의 값 : 성공적인 수행의 실패를 의미 • ‘exit’ 명령어에 주어지는 인자는 쉘의 ‘?’ 변수에 저장됨 22

  23. ‘exit’ 명령어와 ‘?’ 변수 예제 • 스크립트 작성하기 (bigfiles) 23

  24. ‘exit’ 명령어와 ‘?’ 변수 예제(Cont’d) • 스크립트 실행하기 (bigfiles) 24

  25. 형식 if 명령어 then 명령어(들) else 명령어(들) fi ‘if/else’ 명령어 • 양자택일(two-way decision making)을 표현하는데 사용함 • ‘if’ 다음의 명령어가 거짓으로 평가되면 ‘else’ 다음의 명령어를 실행함 25

  26. ‘if/else’ 명령어 예제 • 스크립트 작성/실행하기 (ifelseTest) 26

  27. 형식 if 명령어 then 명령어(들) elif 명령어 then 명령어(들) elif 명령어 then 명령어(들) else 명령어(들) fi ‘if/elif/else’ 명령어 • 다중택일(multi-way decision making)을 표현하는데 사용함 • ‘if’ 다음의 명령어가 거짓으로 평가되면 ‘elif’ 다음의 명령어를 평가하고 이 명령어의 수행이 성공하면 ‘then’ 이하의 문장을 실행 • 주어진 ‘elif’문장이 모두 실패인 경우 ‘else’이하의 문장이 실행됨 27

  28. ‘if/elif/else’ 명령어 예제(1) • 스크립트 작성하기 (tellme) 28

  29. ‘if/elif/else’ 명령어 예제(1)(Cont’d) • 스크립트 실행하기 (tellme) 29

  30. ‘if/elif/else’ 명령어 예제(2) • 스크립트 작성하기 (tellme2) 30

  31. ‘if/elif/else’ 명령어 예제(2)(Cont’d) • 스크립트 실행하기 (tellme2) 31

  32. 내장명령어 ‘null’ • 콜론(:)으로 나타냄 • 실제 아무런 작업도 하지 않으며 단지 종료 상태를 0으로 돌려줌 • 주로 ‘if’다음에 어떤 작업도 지정하고 싶지 않을 때 사용 (‘then’다음에 문장을 기술하지 않으면 에러가 발생하기 때문) • 무한루프를 작성할 때도 사용 32

  33. 형식 case 변수 in value1) 명령어(들) ;; value2) 명령어(들) ;; *) 명령어(들) ;; esac ‘case’ 명령어 • 다중분기(multiway branching) 명령어로써, if/elif 대신 사용가능 • ‘case’ 변수와 대응되는 ‘value’가 없으면 ‘*)’ 기호 다음에서부터 ‘esac’ 사이의 문장들을 수행함 • ‘*)’ 기호의 역할은 if/else 조건문에서 else와 동일 • ‘case’ 변수의 값에는 와일드카드나 |(OR연산자)를 사용할 수 없음 33

  34. ‘case’ 명령어 예제 • 스크립트 작성하기 (xcolors) 34

  35. ‘case’ 명령어 예제(Cont’d) • 스크립트 실행하기 (xcolors) 35

  36. 루프 명령어 • 루프 명령어는 명령어 혹은 명령어 집합을, 일정 회수만큼 반복하거나 특정한 조건을 만족할 때까지 계속 실행시켜야 하는 경우에 사용 • 배시 쉘에서는 for, while, until과 같은 세 가지 루프를 지원함 36

  37. 형식 for variable in word_list do 명령어(들) done ‘for’ 명령어 • ‘for’ 루프 명령어는 정해진 횟수의 반복을 위해 사용 • 일련의 파일이나 사용자에 대해 동일한 명령어들을 반복하여 실행시킴 • 변수(variable)에 단어가 대입되면 루프의 몸체에 해당하는 ‘do’와 ‘done’ 사이의 명령어들이 실행됨 37

  38. ‘for’ 명령어 예제(1) • 스크립트 작성/실행하기 (forloop) 38

  39. ‘for’ 명령어 예제(2) • 스크립트 작성/실행하기 (backup) 39

  40. 형식 while 명령어 do 명령어(들) done ‘while’ 명령어 • ‘while’ 명령어는 다음에 따라오는 명령어를 평가해서, 종료상태가 0이면 루프 몸체(do와 done사이)의 명령어들을 수행시킴 • ‘while’ 루프에 의해 명령어의 종료 상태가 0이 아닌 값으로 바뀔 때까지 루프가 계속됨 • 종료 상태가 0이 아닌 값인 경우 프로그램의 제어는 done 다음으로 옮겨져서 계속 실행 40

  41. ‘while’ 명령어 예제(1) • 스크립트 작성/실행하기 (num) 41

  42. ‘while’ 명령어 예제(2) • 스크립트 작성/실행하기 (quiz) 42

  43. ‘while’ 명령어 예제(3) • 스크립트 작성/실행하기 (sayit) 43

  44. 형식 until 명령어 do 명령어(들) done ‘until’ 명령어 • ‘while’ 명령어와 유사하게 사용되나 until 다음에 나오는 명령어가 실패해야 루프가 실행된다는 점이 다름 • 즉, 명령어의 종료 상태가 0이 아닌 경우에 루프가 수행됨 • 종료 상태가 0이 되면, 루프가 종료하고 키워드 done 다음 부분이 실행됨 44

  45. ‘until’ 명령어 예제 • 스크립트 작성/실행하기 (hour) 45

  46. 형식 select var in wordlist do 명령어(들) done ‘select’ 명령어 • 배시 쉘에서는 메뉴 생성을 위해 select라는 새로운 루프를 제공함 • 숫자(일련번호)를 선택 항목으로 사용하는 메뉴를 표준 에러로 출력하면 프롬프트 PS3을 이용해 사용자의 입력을 기다림(PS3의 기본값은 #? 이다) • 사용자가 입력한 값은 배시 쉘의 내장변수인 REPLY에 저장됨 46

  47. ‘select’ 명령어 예제(1) • 스크립트 작성/실행하기 (runit) 47

  48. ‘select’ 명령어 예제(2) • 스크립트 작성하기 (class) 48

  49. ‘select’ 명령어 예제(2)(Cont’d) • 스크립트 실행하기 (class) 49

  50. 루프 제어 명령어 • 특별한 상황이 발생하면, 루프를 탈출하거나, 루프의 시작 부분으로 되돌아가야 하는 경우 • 배시 쉘에서는 이러한 특정 상황을 처리할 수 있는 루프 제어 명령어들을 제공함 • shift, break, continue 등 50

More Related