00 개요
- Bash Shell 에서는 함수를 일종의 mini script처럼 다룸
- Bash Shell의 함수는 Shell Script의 구조과 작동하는 방식이 비슷
01 Shell Script 함수 만들기 (Bash)
- Bash Shell에서 함수 생성 방식은 2가지 형태로 나뉨
0. 주의사항
- 함수를 정의한 후에 함수 사용 가능 (함수를 정의하기 전에 함수 호출 시 에러 발생)
- 함수 재정의 시 이전에 만들어진 함수의 정의를 덮어씀 (override)
- Shell Script 상에서는 아무런 오류 메시지 없이 원해 함수의 정의를 덮어씌우므로 주의할 것
1. 첫 번째 형식: 키워드 함수
- 코드 블록에 함수 이름을 지정하는 키워드 함수
function 함수명 {
명령어
}
- 예시
$ cat test.sh
function hello {
echo "hello"
}
hello
$ ./test.sh
hello
2. 두 번째 형식
- 함수명 뒤에 빈 괄호 ()는 함수를 정의한다는 의미
- 다른 프로그래밍 언어에서 함수를 정의하는 방식과 유사
함수명() {
명령어
}
- 예시
$ cat test.sh
func1() {
echo "hello"
}
func1
$ ./test.sh
hello
02 Shell 함수의 값 되돌려 주기
- Bash Shell에서 함수는 종료 상태를 return 함
- 종료 상태를 만들 수 있는 방법은 3가지로 나뉨
1. 기본 종료 상태
- 기본적으로 함수의 종료 상태는 함수의 마지막 명령의 종료 상태를 되돌려줌
2. return 명령어 사용
- return 함수를 사용하여 함수의 종료 상태를 정의하는 단일 정수값 (0 - 255) 지정 가능
- 주의:
- 해당 값의 범위: 0 - 255 정수 (int)
- 즉, return 값이 255 보다 크거나 임의의 실수 또는 문자열일 경우 다른 방식 사용해야 됨
- 예시
$ cat test1.sh
#! /bin/bash
function DOUBLE {
read -p "Enter a value: " value
echo "doubling the value"
return $[ $value * 2 ]
}
DOUBLE
echo "The new value is $?"
exit 0
$ . test1.sh
Enter a value: 1
doubling the value
The new value is 2
$ . test1.sh
Enter a value: 200
doubling the value
The new value is 144
- 설명:
- return 값이 2일 경우 정상적으로 값을 반환
- 1 * 2 = 2
- 출력값: 2 (정상)
- 이유: return 값이 0 - 255 정수 범위 내에 있음
- return 값이 400이어야 하는 경우 다른 값이 나옴
- 200 * 2 = 400
- 출력값: 144 (오류)
- 이유: return 값이 0 - 255 정수 범위 밖에 있음
- return 값이 2일 경우 정상적으로 값을 반환
3. echo 명령어 + 함수의 출력 사용
- 함수의 출력을 Shell 변수에 저장하여 사용하는 방법
- 임의의 실수(부동소수점) 혹은 문자열 사용 가능
- 예시
$ cat test2.sh
#! /bin/bash
function DOUBLE {
read -p "Enter a value: " value
echo $[ $value * 2 ]
}
result=$(DOUBLE)
echo "The new value is $result"
$ . test2.sh
Enter a value: 200
The new value is 400
- 설명:
- 200 * 2 = 400
- 출력값: 400 (정상)
- 주의:
- echo 명령어를 이용해서 값을 반환하는 경우 함수 내에서 사용한 모든 echo 문을 stdout 출력문으로 인식하여 값을 저장함
- 그러므로 이 방법을 사용하는 경우 마지막 return 값에만 echo사용해야 됨
03 Error
1. "command not found"
$ cat test.sh
#!/bin/bash
func1
func1() {
echo "hi"
}
$ ./test.sh
./test.sh: line 3: func1: command not found
- 설명: test라는 shell script를 실행했는데 그 func1이라는 명령어가 없다고 에러 뜸
- 이유: test.sh 파일 안에서 func1이 func1()을 통하여 정의되기 전에 호출되었기 때문
- 해결: func1을 func1()을 통하여 정의된 후 호출하면 됨
$ cat test.sh
#!/bin/bash
func1() {
echo "hi"
}
func1
$ ./test.sh
hi
참조
- https://m31phy.tistory.com/239
- https://velog.io/@khyup0629/shell-script-함수-이용하기
'Shell' 카테고리의 다른 글
test (파일 확인 명령어) (1) | 2024.06.05 |
---|---|
while문 사용법 (shell script) (1) | 2024.06.04 |
Shell 변수 (variable) (0) | 2024.04.30 |
Shell, Shell Script, .sh란 (0) | 2024.04.30 |
case문 사용법 (shell script) (0) | 2024.04.30 |