용어체크
1. global 변수
- 전체 지역(블록) 어디에서든 사용할 수 있는 변수
- 소멸 시점은 프로그램이 종료되는 시점에 소멸
2. local 변수
- 특정 지역(블록)에서만 사용할 수 있는 변수
- 선언한 지역 내에서만 사용 가능한 변수
- 소멸 시점은 선언된 블록을 빠져 나오는 시점에 소멸
학습내용
|
쉘스크립트는 순차적으로 실행되므로 함수 사용 전에 선언을 해주어야 함.
함수 안에서 다른 함수를 정의할 수 있음
함수 목록 출력 : typeset -f
함수 삭제 : unset -f 함수명
함수 인자 전달 시 전달 인자가 여러 개인 경우는 공백으로 구분
함수 종료 : return 반환값 또는 $ 변수명
1. 쉘 함수
1) 사용자 정의 함수
정의 형식 1-1 function 함수명 () { 수행 명령들 } |
정의 형식 1-2 function 함수명 { 수행 명령들 } |
정의 형식 2 함수명() { 수행 명령들 } |
function 함수명 <- 과 같이 쓰는 경우에() 생략 가능 | function을 생략하는 경우에는 ()를 생략하면 안된다. |
변수. 인자를 주면 받고 안주면 안받는것이 유닉스 함수의 특징이다. 주어지는 인자는 공백으로 구분된다.
동일한 이름의 함수를 중복 선언한 경우 : 마지막으로 선언된 함수가 실행됨
2) 변수 선언하기
전역 변수와 지역 변수 선언하기
지역변수는 블록 밖에서 선언할 수 없다.
전역변수는 어디서든 선언할 수 있다.
declare(typeset)를 이용하여 변수 선언하기
변수란 값을 저장하기 위한 공간이다.
declare -옵션 변수명
-r : 읽기 전용 변수로 선언. 상수를 선언하기 위한 용도로 사용.
-i : 정수형으로 변수를 선언. 문자열을 할당하면 0으로 할당됨.
-a : 배열로 변수를 선언한다.
3)
4) 코드 블록과 I/O 재지향
함수는 종료 상태라고 부르는 값을 리턴함
2. 디버깅
1) "echo" 명령을 이용한 디버깅
디버깅을 위한 가장 간단한 방법은 echo 명령을 이용해서 결과값을 출력해 보는 방법이다. 쉘 스크립트는 echo 명령을 이용하여 디버깅 시, 다시 컴파일할 필요가 없다.
2) "tee 명령"을 이용한 디버깅
중요한 부분에 tee필터를 걸어서 프로세서나 데이터 흐름을 확인
sh -x 쉘스크립트파일명 : 쉘스크립트를 디버깅 모드로 돌리고자 할 때 사용
sh -n 쉘스크립트파일명 : Syntax 오류를 찾아낼 수 있으나, Syntax 오류 이외의 다른 값들은 보여주지 않음.
3) "-n -v -x 옵션"을 이용한 디버깅
다른 방법으로 실행 시 옵션을 주거나 코드에 한 줄만 추가하면 해볼 수 있음. 스크립트의 각 행이 실행될 때마다 화면에 출력해서 확인할 수 있다.(+로 시작하는 것이 스크립트의 각 행이다)
bash -n : 스크립트 실행 없이 단순 문법 오류만 검사(찾지 못하는 문법 오류가 있을 수 있음 ㅜ), 이 역시 Syntax 오류 이외의 다른 값들은 보여주지 않는다. 스크립트 안에 set -n 또는 set -o noexec 를 삽입해도 동일한 동작을 한다.
bash -v : 명령어 실행 전 해당 명령어 출력(echo) 스크립트 안에 set -v 또는 set -o verbose 를 삽입해도 동일한 동작
bash -x : 쉘 스크립트를 디버깅 모드로 돌리고자 할 때 사용. 명령어 실행 후 해당 명령어 출력(echo). 스크립트 안에 set -x 또는 xet -o xtrace도 동일한 동작
* 스크립트 안에 set -u 또는 set -o nounset을 삽입 - 미선언변수 발견 시 unbound variable 메시지 출력
4) "trap"을 이용한 디버깅
trap가 포함된 스크립트를 한 행씩 실행할 때마다 명령을 실행(주로 변수. 함수의 변화 확인하는 데 사용)
지정한 시그널이 스크립트로 전달될 때마다 지정한 명령을 실행한다.
DEBUG 시그널을 받을 때마다 명령이 실행되도록 할 때 : DEBUG
trap을 이용한 "exit 잡아채기" 디버깅 예
(EXIT는 스크립트가 종료될 때 발생하는 시그널의 이름)
함수의 값 반환 방법에 대해 설명해보세요. 유닉스 쉘에서 함수의 값을 반환하는 방법으로는 return 명령어를 이용하는 것이 일반적이며, return 뒤에 아무런 반환값을 표기하지 않으면 성공하면 0을 그렇지 않으면 0이외의 값을 반환하게 됩니다. 함수 내에 return 명령어를 이용하지 않고 echo 명령어를 이용하여 값을 반환할 수도 있는데, 이 경우에는 $?를 이용하여 echo를 이용하여 출력한 값을 확인할 수 있습니다.
Quiz 01함수를 정의할 때 function 키워드를 생략할 수 있는데, 이 경우에도 함수명 뒤의 ()를 생략할 수 있다.
- 1 O
- 2 X
정답 :2
해설 :function 키워드를 생략하고 함수를 정의한 경우에는 함수명 뒤의 ()를 생략하면 안 된다. 그러나, function를 생략하지 않은 경우에는 () 생략이 가능하다.
Quiz 02다음 중 사용자가 정의한 함수 목록을 볼 수 있는 명령어는?
- 1 unset –f
- 2 typeset –f
- 3 ls
- 4 cat
정답 :2
해설 :사용자가 정의한 함수 목록을 보여주는 명령어는typeset –f 명령어이다.
Quiz 03함수에 값을 반환하면서 함수의 수행을 종료하는 명령어는?
- 1 exit
- 2 quit
- 3 return
- 4 ;;
정답 :3
해설 :exit는 프로그램을 종료하는 명령어이며, 함수에 값을 반환하면서 함수의 수행을 종료하는 명령어는 return 명령어이다.
학습정리
1. 쉘 함수
- 쉘스크립트는 순차적으로 실행되므로 함수 사용 전에 선언을 해 주어야 함
- 함수 안에서 다른 함수를 정의할 수 있음
- 함수 목록 출력: typeset –f
함수 삭제: unset –f 함수명 - 함수 인자 전달시 전달 인자가 여러 개인 경우는 공백으로 구분
- 함수 종료: return 반환값 또는 $변수명
2. 디버깅
- “echo 명령”을 이용한 디버깅
- “tee 명령”을 이용한 디버깅
- “ –n -v –x 옵션”을 이용한 디버깅
- “trap”을 이용한 디버깅
'컴퓨터공학 > 컴퓨터시스템' 카테고리의 다른 글
컴퓨터시스템 10 - 2 포그라운드와 백그라운드 처리하기 (0) | 2021.10.28 |
---|---|
컴퓨터시스템 10 - 1 프로세스에 대해 알아보기 (0) | 2021.10.27 |
컴퓨터 시스템 9 - 1 연산자와 제어문 다루기 (0) | 2021.10.18 |
컴퓨터시스템 7 - 2 배시 쉘 활용하기 (0) | 2021.10.11 |
컴퓨터 시스템 7 - 1 쉘 스크립트와 쉘 변수 다루기 (0) | 2021.10.07 |