BASH 쉘에서는 함수를 일종의 미니 스크립트처럼 다룬다. 따라서 BASH 쉘의 함수는 쉘 스크립트와 구조와 작동하는 방식이 비슷하다. 이러한 BASH 쉘에서 함수를 만들 수 있는 방식은 크게 두 가지 형태로 나뉜다.
1. 첫번째 형식: 키워드 함수
1) 코드 블록에 함수 이름을 지정하는 키워드 함수
2) syntax
function name {
commands
}
- name
: 함수에 지정할 고유 이름을 지정
- commands
: 함수를 구성하는 하나 이상의 BASH 쉘 명령어
2. 두번째 형식
name() {
commands
}
- 다른 프로그래밍 언어에서 함수를 정의하는 방식과 유사함
- name 뒤의 빈 괄호는 함수를 정의하는 것
3. Shell script에서 함수를 사용할 때 주의할 점
1) 함수를 사용하기 전에 함수가 정의되어 있어야 함
2) 함수를 다시 정의하게 되면 이전에 만들어진 함수의 정의를 덮어쓰게 됨
- Shell script 상에서는 아무런 오류 메시지 없이 원래 함수의 정의를 덮어씌우므로 주의
Shell 함수의 값 되돌려 주기
Bash 쉘에서 함수는 종료 상태를 리턴한다. 이러한 종료상태를 만들 수 있는 방법은 3가지가 있다.
1. 기본 종료 상태
기본적으로 함수의 종료상태는 함수의 마지막 명령의 종료상태를 되돌려 준다.
2. return 명령어 사용
1) return 함수를 사용하여 함수의 종료상태를 정의하는 단일 정수값을 지정할 수 있다.
2) return을 사용 시 주의해야 할 점
- return으로 종료상태를 리턴하는 경우, 해당 값은 0~255의 정수 범위 안에 있어야 함
- 따라서, 리턴하는 값이 255보다 크거나 임의의 실수 혹은 문자열을 리턴하는 경우에는 다른 방식을 사용해야 한다.
$ vim function1.sh
#! /bin/bash
function TEST {
read -p "Enter a value: " value
echo "doubling the value"
return $[ $value * 2 ]
}
TEST
echo "The new value is $?"
$ . function1.sh
Enter a value: 1
doubling the value
The new value is 2
$ . function1.sh
Enter a value: 200
doubling the value
The new value is 144
위의 예를 보면, 값을 2로 리턴하는 경우에는 정상적으로 값을 반환하지만, 반환해야 할 값(200*2)이 255를 넘어버리면 다른 값을 리턴함을 볼 수 있다.
3. 함수의 출력 이용하기
- 이 방법은 함수의 출력을 쉘 변수에 저장하여 사용한다.
- 임의의 실수(부동소수점) 혹은 문자열도 모두 사용할 수 있다.
$ vim function2.sh
#! /bin/bash
function TEST {
read -p "Enter a value: " value
echo $[ $value * 2 ]
}
result=$(TEST)
echo "The new value is $result"
$ . function2.sh
Enter a value: 200
The new value is 400
- 주의: echo 명령어를 이용해서 값을 반환하는 경우, 함수 내에서 사용한 모든 echo 문을 STDOUT 출력문으로 인식하여 값을 저장한다. 따라서 이 방법을 사용하는 경우에는 마지막 return 값에만 echo를 쓰도록 하자.
Shell Script에서 매개변수 사용하기
BASH 쉘은 함수를 미니 스크립트처럼 사용하기 때문에, 함수의 매개변수를 사용하는 방법이 기존의 쉘 스크립트에서 매개변수를 사용하는 방법과 동일하다.
1. 함수의 매개 변수 (또는 쉘 스크립트의 매개변수)
• $0 : 함수의 이름
• $1~$9 : 함수의 매개 변수들
• $# : 함수에 전달된 매개변수들의 갯수
2. 매개 변수를 포함한 함수의 사용할 때는 함수와 같은 커맨드 라인에 매개변수를 제공한다. (아래의 예제 참고)
$ vim function3.sh
#! /bin/bash
function addem {
if [ $# -eq 0 ] || [ $# -gt 2 ]; then
echo -1
elif [ $# -eq 1 ]; then
echo $[ $1 + $1 ]
else
echo $[ $1 + $2 ]
fi
}
echo "Adding 10 and 15: $(addem 10 15)"
echo "Adding 1 and 1 : $(addem 1)"
echo "Adding 1, 2, 3 : $(addem 1 2 3)"
$ . function3.sh
Adding 10 and 15: 25
Adding 1 and 1 : 2
Adding 1, 2, 3 : -1
Shell Script에서 전역 및 지역 변수
기본적으로 Shell script에서 정의되는 모든 변수들은 전역 변수로 설정이 된다. 다만, 지역 변수로 변수를 설정하고자 하는 경우에는 반드시 변수 선언 앞에 local
키워드를 사용해야한다.
1) 전역 변수 선언: 별도의 키워드 없이 변수 선언이 모두 전역 변수로 정의됨
2) 지역 변수 선언: local <변수명>
함수들의 라이브러리 만들기
Shell script에서도 자주 사용되는 여러 함수들을 라이브러리의 형태로 만들어서 사용할 수 있다. 이러한 라이브러리를 만드는 방법과 사용하는 방법은 간단하다.
(1) 스크립트에 필요한 기능들을 포함하는 공용 라이브러리 파일 (혹은 스크립트 파일)을 만든다.
(2) 위의 스크립트 파일을 이후 사용하는 쉘 스크립트에 포함시킨다.
※ (1)에서 정의한 라이브러리 파일을 포함시킬때는 source
명령어(혹은 .
명령어)를 이용해서 불러와야 한다.
ex) 라이브러리의 예시
- myfunctions.sh: 사용할 함수들을 정의한 파일
- example.sh: myfunctions.sh에 정의된 함수들을 사용하는 파일
$ vim myfunctions.sh
function addem {
echo $[ $1 + $2 ]
}
function multem {
echo $[ $1 * $2 ]
}
$ vim example.sh
#! /bin/bash
source ./myfunctions.sh
value1=10
value2=5
echo " function addem: $(addem $value1 $value2)"
echo " function multem: $(multem $value1 $value2)"
$ . example.sh
function addem: 15
function multem: 50
'프로그래밍 언어 > Shell script(BASH)' 카테고리의 다른 글
[Shellscript] 입력 및 출력 리다이렉트, 그리고 파이프라인 (0) | 2021.06.27 |
---|---|
[Shell script] 여러 개의 사용자 계정 만들기 (0) | 2021.06.03 |
[Shell scripts] 기본적인 스크립트 제어 (if, for, where, case) (0) | 2021.05.17 |
[Shellscript] 정수 및 실수 연산 (0) | 2021.04.20 |
[Shellscript] 쉘, 쉘 스크립트 및 쉘 변수 (BASH) (0) | 2021.04.20 |
댓글