본문 바로가기
Shell

Shell Script 함수 만들기

by yororing 2024. 4. 30.

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 정수 범위 밖에 있음

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

참조

  1. https://m31phy.tistory.com/239
  2. https://velog.io/@khyup0629/shell-script-함수-이용하기
  3.  

'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