목차
1. 쉘 스크립트
(1) 스크립트란?
(2) 쉘 스크립트
- 쉘이 실행하는 프로그램
- 유닉스 명령 + 쉘이 제공하는 프로그램 구성 요소
- 쉘 스크립트 파일 이름은 키워드나 엘리어스, 내장 명령과 같은 이름을 쓰지 않는 것이 바람직하다.
※ 쉘 명령 실행 순서 : Alias -> Keyword(if, while, until 등) -> function -> internal operation(cd, echo 등)
-> Script, Utility 등 PATH 경로에 있는 실행가능한 파일
(3) 쉘 스크립트 만들기
1) vi 에디터로 편집
1 2 3 4 5 | #!/bin/bash # My First Script Program printf "I love UNIX !\n" pwd | cs |
2) 쉘 스크립트 실행 방법
- 첫번째 방법 (쉘을 실행하면서 인자로 스크립트 이름 지정)
- 두번째 방법 ( 파일을 직접 실행 )
3) 쉘 스크립트 종료하기
1 2 3 4 | #!/bin/bash #test_exit : exit과 $?를 테스트하는 프로그램 exit 20 | cs |
스크립트의 종료 상태를 $? 변수에 저장한다.
(4) 스크립트 파일의 구성요소
1) #!
매직 넘버라고 불린다.
스크립트 파일의 가장 처음에 위치한다.
스크립트를 실행할 프로그램을 지정해주는것.
( 쉘이 아닌, 다른 실행가능한 명령을 지정해 줘도 된다. ex) #!/bin/more
2) #
3) 쉘 명령
4) 쉘 프로그램
2. 쉘 변수 사용하기
(1) 정의
1) 변수란?
2) 종류
3) 지정방법
4) 쉘 변수 표현식
(2) 쉘 변수 문자열 처리
(3) 명령행 인자 처리
1) 명령행 인자?
2) 위치 매개 변수
(4) 쉘 특수문자 및 명령 처리
1) 인용 부호
2) 명령 대체
3. 입력 받기
(1) 사용자로부터 입력 받기 - read
1) 기 능
2) 형 식
3) 사용예시
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash # 키보드 입력 처리를 테스트 하는 스크립트 read x # 아무 메시지 없이 사용자 입력을 기다림 echo "x : $x" # 사용자가 임의의 값을 입력하면 출력 read x y # 첫 단어는 x, 나머지는 y에 저장 echo "x is $x y is $y" # x, y 값 출력 read -p “Input : “ # Input : 을 출력한 후 입력 기다림 echo "input : $REPLY" # $REPLY에 자동 저장된 입력값 출력 | cs |
(2) 문서를 통한 입력 - here 문서
1) 기능
2) 형 식
3) 사용 예시
1 2 3 4 5 6 7 | #!/bin/bash # here 문서 테스트. user1에게 메일을 보냄 mail user1 << END This is a test mail for here document END | cs |
4. 연산자
(1) 정의
(2) 종류
5. 제어문
(1) 정의
(2) 종류
1) 선택적 실행문
2) 반복 실행문
(3) 조건 테스트
1) 조건 테스트 - 문자열 연산자
2) 조건 테스트 - test 플래그
(4) 선택적 실행문
1) if
조건명령이 거짓일 때 새로운 분기 명령(elif) 실행한다.
참이면 then 이후의 명령을 실행한다. 어느것도 맞지 않으면 else로 간다.
예시)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/bin/bash # test_elif: if-elif 문 테스트 echo “Input Score : “ read score if (( $score >= 90 )) then echo “Your score is great. “ elif (( $score >= 80 )) then echo “Your score is good. “ else echo “Your score is not good. “ fi | cs |
결과)
2) case 문
주어진 변수의 값에 따라 실행할 명령 따로 지정
변수의 값이 value1 이면 value1부터 ;;을 만날 때까지 명령 실행
값의 지정에 특수기호, | (or 연산자) 사용 가능
일치하는 값이 없으면 기본값인 * 부터 실행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash # case 테스트 스크립트 echo "Select command :" read cmd case $cmd in [0-9]) # 0부터 9까지 임의의 숫자 date ;; "cd" | "CD") # cd 또는 CD echo $HOME ;; [aA-C]*) # 소문자 a, 대문자 A,B,C로 시작하는 임의의 문자열 pwd ;; *) echo" Usage : select command" ;; esac |
결과)
(4) 반복 실행문
1) for문
list 대신 $(
Tip) list 대신 $(<file)을 사용하면 외부 파일의 내용을 입력으로 받아서 처리한다.
예시)
1 2 3 4 5 6 7 | #!/bin/bash # test_for: for 테스트 스크립트 for num in 0 1 2 do echo "Number is $num" done | cs |
결과)
2) while문
조건 명령이 정상 실행되는 동안 명령을 반복한다.
예시)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash # test_while: while을 이용해 1부터 10까지 합을 구하는 스크립트 count=1 sum=0 while (( count <= 10 )) do (( sum += count )) let count+=1 done echo "Sum(1~10) : $sum" | cs |
결과)
3) until문
조건 명령이 정상 실행될 때까지 명령 반복
예시)
1 2 3 4 5 6 7 8 9 10 | #!/bin/bash # test_until: 지정한 사용자가 로그인하면 알리는 스크립트 echo "Input name :" # 입력 안내문 출력 read person # 유저 이름을 person에 저장 until who | grep $person # > /dev/null do sleep 5 # 유저가 접속 중이 아니면 5초 쉼 done | cs |
결과)
sys1790은 온라인이기 떄문에 뜨고 sys1763은 오프라인이기떄문에 sleep상태이다.
4) select 문
메뉴를 생성할 수 있는 반복 실행문이다.
list에 지정한 항목을 자동으로 선택 가능한 메뉴로 만들어 화면에 출력해준다.
사용자는 각 항목에 자동으로 부여된 번호를 선택한다.
사용자 입력은 select와 in 사이에 지정된 변수에 저장
보통 case 문과 결합하여 입력 값을 처리한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash # test_select: 사용자 입력에 따라 pwd,date 명령실행 PS3="Input command(1~3) " select cmd in pwd date quit do case $cmd in pwd) pwd ;; date) date;; quit) break;; *) echo "Invalid input. select number" ;; esac REPLY= done | cs |
5) 루프 제어문 - continue
- 루프 안에서 사용한다.
- 이후 실행 순서를 무시하고 루프의 처음으로 돌아가는 명령
- 숫자를 지정하면 중첩된 루프 안에서 특정 루프의 처음으로 돌아갈 수 있다.
1 2 3 4 5 6 7 8 9 10 | #!/bin/bash # test_cont: continue 테스트 for person in $(< list) # `cat list`와 동일 do if [[ $person == user2 ]] then continue # user2 이면 건너뜀 fi echo “Hello, $person” done | cs |
결과)
6. 함수
(1) 정의
(2) 선언 하는 법
함수와 앨리어스와 공통적인 부분도 있는 반면에 차이점도 있다.
함수는 조건에 따라 처리가 가능하고 인자 처리가 가능하다.
1) 정의된 함수 확인
(3) 함수의 종료 - return
1) 함수 종료 조건
예시)
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash # 함수 리턴값 테스트 function sum { typeset sum (( sum= $1 + $2 )) return $sum } sum $1 $2 echo "$1 + $2 = $?" |
결과)
add 3 4
3 + 4 = 7
(4) 함수 삭제 - unset
1) 기 능
2) 형 식
7. 디버깅
(1) bash -x
1) 기 능
스크립트의 각 행이 실행될 때마다 화면에 출력된다.
2) 형 식
3) 사용 예제
(2) trap
1) 기 능
- 지정한 시그널이 스크립트로 전달될 때마다 지정한 명령 실행
- 스크립트의 명령이 한 줄씩 실행될 때마다 DEBUG 시그널이 스크립트로 전달된다.
- DEBUG 시그널을 받을 때마다 원하는 변수 값 출력이 가능하다.
=> 즉. 스크립트가 실행되는 도중 변수값 확인이 가능하다.
2) 형 식
3) 사용 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/bash # test_trap: trap 테스트 스크립트 trap 'echo "$LINENO : count=$count " ' DEBUG count=1 sum=0 while (( count <= 10 )) do (( sum += count )) let count+=1 done echo "Sum(1~10) : $sum " | cs |
'Infrastructure > Linux' 카테고리의 다른 글
[Concept] Chapter 14 유닉스 시스템 관리 (0) | 2017.12.25 |
---|---|
[연습문제] 유닉스 이론과 실습 개정판 13장 연습문제 (0) | 2017.12.25 |
[연습문제] 유닉스 이론과 실습 개정판 12장 연습문제 (0) | 2017.12.25 |
[Concept] Chapter 12 유닉스 쉘의 이해 (0) | 2017.12.25 |
[연습문제] 유닉스 이론과 실습 개정판 11장 연습문제 (0) | 2017.12.25 |