쉘 스크립트 함수 활용

함수 정의 방법

쉘 함수는 여러 명령어를 하나의 블록으로 묶어 코드 재사용과 모듈화를 구현하는 프로그래밍 요소입니다.

함수는 이름과 실행 코드로 구성되며, 다음과 같은 세 가지 방식으로 선언할 수 있습니다:

# 형식 1
함수명() {
    # 실행 코드
}

# 형식 2
function 함수명 {
    # 실행 코드
}

# 형식 3
function 함수명() {
    # 실행 코드
}

함수 활용 방식

함수는 다양한 환경에서 사용 가능합니다:

  • 대화형 셸에서 직접 정의 및 사용
  • 스크립트 파일 내부에 포함
  • 독립된 함수 전용 파일에 저장

함수는 호출 시점에만 실행되며, 호출 위치에 해당 함수의 내용이 대체되어 수행됩니다. 함수는 호출될 때 생성되고, 실행 종료 시 소멸합니다.

반환 값 처리

함수는 두 가지 형태의 반환 값을 제공합니다:

실행 결과 반환

  • echo, printf 등의 명령어를 통한 출력
  • 함수 내부 명령어의 실행 결과

종료 상태 반환

  • 기본적으로 마지막 실행 명령어의 종료 상태를 따름
  • return 명령어로 직접 지정 가능
    • return 0: 정상 종료
    • return 1-255: 오류 상태

대화형 환경에서의 함수 사용

목록표시() {
    ls -la
}

위와 같이 정의한 함수는 현재 세션이 유지되는 동안 사용할 수 있으며, unset 함수명으로 제거할 수 있습니다.

스크립트 내 함수 활용

함수는 사용 전 반드시 정의되어야 하므로, 스크립트 상단에 위치시키는 것이 일반적입니다.

#!/bin/bash

인사말() {
    echo "안녕하세요. 오늘 날짜는 $(date +%F) 입니다."
}

echo "함수를 호출합니다"
인사말
echo "함수 호출 완료"

함수 불러오기

별도 파일에 작성한 함수를 현재 셸 환경에 로드하려면 다음 명령어를 사용합니다:

source 파일경로
# 또는
. 파일경로

함수 제거 및 환경 변수화

정의된 함수를 삭제하려면 unset 함수명을 실행합니다.

자식 프로세스에서도 함수를 사용하려면 환경 변수로 등록해야 합니다:

export -f 함수명

매개변수 전달

함수 호출 시 이름 뒤에 공백으로 구분하여 인자를 전달할 수 있습니다:

함수명 인자1 인자2 인자3

함수 내부에서는 $1, $2 등의 위치 매개변수와 $@, $*, $# 등의 특수 변수를 사용할 수 있습니다.

변수 범위

셸 스크립트에서 변수는 다음 세 가지 범위를 가집니다:

  • 환경 변수: 현재 셸과 자식 셸 모두에서 유효
  • 로컬 변수: 현재 셸 프로세스 내에서만 유효
  • 지역 변수: 함수 내부에서만 유효하며 함수 종료 시 자동 소멸
# 일반 변수
변수명=값

# 환경 변수
export 변수명=값
# 또는
declare -x 변수명=값

# 지역 변수 (함수 내부에서만 사용)
local 변수명=값

재귀 함수

함수 내부에서 자기 자신을 호출하는 방식으로, 반복적인 작업을 처리할 때 유용합니다.

#!/bin/bash

팩토리얼() {
    if [ $1 -eq 0 -o $1 -eq 1 ]; then
        echo 1
    else
        echo $(($1 * $(팩토리얼 $(($1 - 1)))))
    fi
}

팩토리얼 $1

디버깅을 위해 bash -x 스크립트명 형식으로 실행하면 실행 과정을 확인할 수 있습니다.

태그: Shell bash function Scripting

9월 1일 12:04에 게시됨