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