Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

예제로 배우는 Bash/Shell 스크립트 함수 사용법

Bash 스크립트에서 함수(function)를 사용하는 방법을 소개합니다. 함수를 활용하면 코드를 재사용하고 스크립트를 훨씬 간결하게 관리할 수 있습니다.

같은 코드를 여러 번 작성할 필요 없이, 한 번만 작성해 두고 필요할 때마다 재사용할 수 있다면 얼마나 편할까요?

바로 그 역할을 해주는 것이 함수입니다.

이 글에서는 Bash/Shell 스크립트에서 함수를 정의하고 활용하는 방법을 예제와 함께 자세히 살펴봅니다.

함수란 무엇인가?

함수는 재사용 가능한 코드 블록입니다. 함수는 매개변수(파라미터)를 받을 수 있어, 서로 다른 입력값에 대해 동일한 반복 작업을 수행할 수 있습니다.

함수는 일반적으로 특정 동작을 수행하거나, 결과를 화면에 출력하거나, 나중에 사용할 값을 반환(return)하는 역할을 합니다.

왜 함수를 사용해야 할까?

예를 들어, 특정 이벤트가 발생했을 때 이메일 알림을 보내는 스크립트가 있다고 가정해 보겠습니다. 여러 수신자에게 내용이 조금씩 다른 이메일을 여러 건 보내려면, 같은 이메일 전송 코드를 스크립트 안에서 여러 번 복사해서 작성해야 할 것입니다.

하지만 함수를 사용하면 이메일 전송 코드를 단 한 번만 작성하고, 수신자·제목·본문만 바꿔가며 한 줄의 함수 호출로 실행할 수 있습니다. 중복 코드 없이 깔끔하게 처리되는 것이죠.

Bash 함수 문법

Bash/Shell 스크립트에서 함수를 작성하는 기본 문법은 다음과 같습니다:

함수이름 () {
    # 실행할 명령어들
    # 선택 사항: 반환 값
}

작성 시 주의할 점은 다음과 같습니다:

  • 함수 이름은 함수를 호출할 때 사용할 이름입니다.
    • 영문자, 숫자, 밑줄(_)만 사용할 수 있습니다!
  • 함수 이름 뒤에는 반드시 ()(소괄호)가 붙어야 합니다.
    • 괄호 앞뒤의 공백도 필수입니다! 공백이 없으면 오류가 발생합니다.
  • 함수가 실행할 코드는 반드시 {}(중괄호)로 감싸야 합니다.
    • 중괄호 밖의 코드는 함수의 일부가 아니므로 함께 실행되지 않습니다.
  • 명령어 자리에는 Linux 시스템에서 평소 사용하는 어떤 명령이든 넣을 수 있습니다.
  • 필요하다면 return으로 값을 반환할 수 있습니다 – 아래 예제를 참고하세요.
    • 함수를 중간에 종료하고 싶을 때도 값을 지정하지 않은 return을 호출하면 됩니다.
    • 특수 변수 $?에는 마지막으로 실행된 명령의 반환 값이 저장되므로, 함수 실행이 끝난 뒤 스크립트의 다른 위치에서 그 값을 확인할 수 있습니다.

예제와 상세 설명

다음 예제는 Bash 함수의 다양한 요소를 모두 담고 있으며, 각 부분마다 주석으로 설명을 덧붙였습니다.

#!/bin/bash

# 전역 변수 정의 - 함수나 루프 내부에 정의된 것이 아니므로 스크립트 어디서든 사용 가능
initial_value=3

# 간단한 수학 연산을 수행하는 함수 정의
my_math_function () {

    # 함수에 전달된 매개변수 가져오기
    # 매개변수는 함수 호출 시 함수 이름 뒤에 나열되며,
    # $1, $2 순서대로 이름이 붙습니다.
    # 아래에서는 가독성을 위해 이 값들을 지역 변수(함수 내부에서만 유효)에 할당합니다.
    local multiplier_value=$1
    local addition_value=$2

    # 계산 결과를 지역 변수에 할당
    # $(( )) 로 감싸면 계산 '결과'가 변수에 저장되고,
    # 감싸지 않으면 계산식이 문자열 그대로 저장됩니다.
    local result=$(( $initial_value * $multiplier_value + $addition_value ))

    # 결과를 콘솔에 출력
    # 함수의 출력(echo)을 활용하면 함수 외부에서 결과를 읽어올 수 있습니다.
    echo $result

    # return 값을 통해서도 함수의 결과를 전달할 수 있습니다.
    return $result

}

# 서로 다른 입력값으로 함수 호출
# 매개변수는 함수 이름 뒤에 공백으로 구분하여 전달합니다.
# 위 함수는 두 개의 매개변수(곱할 값, 더할 값)를 기대합니다.

my_math_function 2 4 # 10 출력 (2 * 3 + 4)

my_math_function 3 5 # 14 출력 (3 * 3 + 5)

# $? 는 마지막으로 실행된 명령의 반환 값을 항상 담고 있는 특수 변수입니다.
# 함수가 return으로 지정한 값을 확인할 때 사용할 수 있습니다.

echo $? # 14 출력

# 함수의 결과를 변수에 할당
# $( ) 로 감싸면 함수가 출력한 모든 텍스트(echo 출력 등)가 변수에 저장됩니다.
my_result=$(my_math_function 6 7)
echo $my_result # 25 출력 (6 * 3 + 7)

함께 읽으면 좋은 글

Linux Shell 스크립트 첫 줄의 '#!'(셔뱅)가 정확히 무엇인지 궁금하다면 관련 글을 참고해 보세요.

Shell 스크립트 자체에 값을 전달하고, 그 값을 스크립트 안의 함수로 넘기는 방법이 필요하다면 관련 아티클을 확인해 보시길 추천합니다.