50% 할인 모든 플랜, 기간 한정. 시작 가격 $2.48/mo
11분 남음
서버 및 OS

Bash 함수 완전 정리: 문법, 예제, 활용 사례

켈리 왓슨 By 켈리 왓슨 11분 분량 2025년 12월 14일 업데이트됨
Bash 함수를 표현하는, 모듈형 구조로 조립되는 파란빛의 코드 블록들을 추상적으로 묘사한 3D 일러스트레이션

Bash 함수는 관련 명령어들을 하나의 이름으로 묶어줍니다. 그 이름을 호출하면 전체 블록이 실행됩니다. 인수를 전달해 동작을 조정하고, 반환값으로 결과를 전달할 수 있습니다. 이를 통해 코드를 깔끔하게 유지하고 관리하기 쉽게 만들 수 있습니다.

Linux는 전 세계 서버 환경에서 압도적인 점유율을 차지하고 있어, Bash 함수 숙달은 그 어느 때보다 중요해졌습니다. 함수를 활용하면 지저분한 스크립트를 깔끔하고 재사용 가능한 자동화로 바꿀 수 있습니다.

이 가이드는 기본 문법부터 고급 사용 사례까지 단계별로 안내합니다. 함수 선언 방법, 매개변수 전달, 반환값 처리를 배우고, 직접 스크립트에 적용할 수 있는 실용적인 예제 10가지를 살펴봅니다.

요약

  • Bash 함수는 스크립트 전체에서 재사용할 수 있는 이름 있는 코드 블록입니다
  • 함수를 정의하려면 function_name() { commands; } 문법을 사용하세요
  • 인수를 전달하려면 $1, $2, $3 위치 매개변수
  • 함수는 코드 가독성, 모듈성, 유지보수성을 높여줍니다
  • 사용법 return 함수를 종료하고 상태 코드를 전달합니다 (0 = 성공, 0이 아닌 값 = 실패)
  • 함수는 다음을 통해 스크립트 간에 공유할 수 있습니다 source or export -f
  • 실용적인 예시로는 파일 백업, 디스크 모니터링, 입력 유효성 검사, 서비스 상태 확인 등이 있습니다

Bash 스크립팅이란?

디지털 두루마리에 Bash 코드가 빛나며 스스로 작성되는 3D 일러스트레이션으로, Bash 스크립팅의 자동화를 표현합니다.

Bash 스크립팅은 Bash 셸을 사용해 작업을 자동화하는 방법입니다. Linux의 기본 커맨드라인 인터페이스로 사용되며, macOS에서도 표준 도구로 자리잡고 있습니다. Bash 스크립트는 Bash 스크립팅 언어로 작성된 프로그램으로, 터미널에서 실행하거나 독립 스크립트 파일로 실행할 수 있습니다.

함께 Linux 데스크톱 사용이 꾸준히 증가하고 있으며, 서버 환경에서도 전 세계적으로 지배적인 위치를 차지하고 있어 Bash 스크립팅 능력은 IT 전문가에게 중요한 기술이 되었습니다. Bash는 Docker, Kubernetes 같은 DevOps 도구 및 CI/CD 파이프라인과도 잘 연동됩니다.

Bash 스크립팅을 활용하면 간단한 명령 실행부터 복잡한 자동화, 시스템 관리까지 다양한 작업을 처리할 수 있습니다. 반복 작업 자동화, 유지보수 스크립트 작성, 배포 파이프라인 구성, 소프트웨어 시스템 관리, 데이터 처리 등이 모두 가능합니다.

Bash 함수란?

복잡하게 뒤엉킨 커맨드라인 데이터가 빛나는 처리 게이트를 통해 정리되는 미래적인 디지털 일러스트레이션으로, Bash 함수의 동작 방식을 시각화한 이미지입니다. 왼쪽에는 여백이 있습니다.

Bash 함수는 사용 목적에 따라 Bash 스크립트 내에 정의하거나, 커맨드 프롬프트에서 대화형으로 설정할 수 있는 명령어 집합입니다. 한 번 정의한 Bash 함수는 해당 스크립트 내에서 또는 다른 스크립트에서 일반 셸 명령처럼 여러 번 호출할 수 있습니다.

Bash 함수를 사용하면 복잡한 작업을 수행하는 재사용 가능한 코드 블록을 만들고, 코드를 체계적으로 정리하며, 스크립트를 간결하게 유지할 수 있습니다. 함수에 인수를 전달하고, 함수 내에서 그 인수를 활용해 원하는 작업을 처리할 수 있습니다. Bash 함수가 반환하는 값은 스크립트의 다른 곳에서도 사용할 수 있습니다.

몇 가지 구체적인 구현 방식을 살펴볼 것입니다. 기본 로직을 위한 simple_function 인수 처리를 위한, simple_inputs 그리고 다음과 같은 고급 구조도 다룹니다 fibonnaci_recursion.

Bash 함수 기초 자동화 작업을 담당하는 시스템 관리자나 DevOps 엔지니어라면 반드시 알아야 할 내용입니다. 이어지는 섹션에서 각 유형을 자세히 설명합니다.

Bash 함수를 사용하는 이유

코드 머신을 구동하는 최적화 기호가 새겨진 빛나는 파란색 기어 이미지로, Bash 함수를 사용할 때 얻을 수 있는 효율성과 속도를 나타냅니다.

Bash 함수의 개념을 살펴봤으니, 이제 주요 장점을 정리해 보겠습니다. 이 섹션에서는 함수가 가장 유용하게 쓰이는 상황을 설명합니다.

재사용성

Bash 함수를 하나 만들면 강력한 도구가 생깁니다. 코드 블록을 한 번 작성하고, 같은 스크립트 안에서 또는 다른 스크립트에서도 필요할 때마다 재사용할 수 있습니다.

중복 코드가 사라지므로 효율이 높아지고 시간도 절약됩니다. 수정이 필요할 때는 함수 한 곳만 고치면 되므로 유지 관리도 훨씬 간편합니다.

가독성

복잡한 스크립트는 이해하기 어렵습니다. Bash 함수를 사용하면 스크립트를 더 작고 다루기 쉬운 단위로 나눌 수 있습니다.

각 함수는 역할을 명확히 설명하는 이름을 가지며 특정 목적만 수행합니다. 덕분에 본인은 물론 다른 개발자도 코드를 쉽게 이해하고 관리할 수 있습니다.

모듈화

함수를 사용하면 코드를 체계적으로 정리할 수 있습니다. 로직을 작은 모듈로 나누면 스크립트 구조가 깔끔해지고 관리하기도 쉬워집니다.

새 기능을 추가할 때도 다른 부분에 영향을 주지 않고 작업할 수 있습니다. 기능을 제거하거나 수정할 때도 나머지 스크립트는 그대로 유지됩니다.

Bash 함수 매개변수

함수에 인수, 즉 매개변수를 전달할 수 있습니다. 이 매개변수를 통해 함수는 입력값에 따라 다른 동작을 수행할 수 있습니다.

비슷한 코드를 여러 번 작성하는 대신, 다양한 입력을 처리하는 함수 하나로 해결할 수 있습니다. 이는 함수의 활용 범위를 크게 넓혀 줍니다.

Bash 함수를 어떻게, 어디서 사용하나요?

스크립트 실행 흐름이 함수 블록으로 분기했다가 반환되는 모습을 보여주는 3D 유리 재질의 순서도로, Bash 함수가 로직 흐름에서 어떻게 사용되는지를 시각화합니다.

이제 좀 더 실용적인 내용으로 넘어가, Bash 함수를 만드는 간단한 예제부터 시작해 보겠습니다. 다음 구문은 Unix 기반 환경에서 사용할 수 있습니다. Windows를 사용 중이라면 Windows 10에 Linux Bash 설치 하여 예제를 따라 진행할 수 있습니다.

Bash 함수 만들기

다음 명령 구조를 사용하세요:

function_name () {

    # 명령어가 여기에 옵니다

}

 

함수를 만들고 나면 코드 어디서든 호출할 수 있습니다. 아래는 실제 동작 예시입니다:

greet () {

    echo "Hello, $1!"

}

 

이 함수를 호출하려면 그리트 월드 를 실행하면 "Hello, World!"가 출력됩니다. $1 는 함수에 전달된 첫 번째 인수를 나타냅니다.

스크립트에서 바로 활용할 수 있는 실용적인 예시를 몇 가지 더 소개합니다:

# 파일 백업 생성

backup_file () {

    cp "$1" "$1.bak"

    echo "Backup created: $1.bak"

}

 

# 디렉터리가 없으면 생성

ensure_dir () {

    if [ ! -d "$1" ]; then

        mkdir -p "$1"

        echo "Created directory: $1"

    fi

}

 

# 타임스탬프와 함께 메시지 기록

log_message () {

    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"

}

 

이 커스텀 Bash 함수들은 한 번만 정의해 두면 스크립트 어디서든 필요할 때마다 호출할 수 있습니다.

함수 문법 핵심 정리

함수는 메인 스크립트 안에서 작은 스크립트처럼 동작하지만, 셸의 메모리를 공유합니다. 함수를 작성할 때는 다음 세 가지 동작 방식을 염두에 두세요.

변수 범위 (지역 vs. 전역)

함수 내부의 변수는 기본적으로 전역 변수로 처리됩니다. 함수 안에서 my_var="test" 를 정의하면 스크립트에 이미 존재하는 my_var 값을 덮어씁니다. 변수를 함수 범위로 제한하고 부작용을 방지하려면 항상 local 키워드를 사용하세요:

local my_var="value"

위치 매개변수

함수는 스크립트와 동일한 $1, $2, 그리고 $@ 변수를 사용해 인수를 읽습니다. 이 변수들은 함수 내부에서만 유효하며, 함수가 종료되면 초기화됩니다. 스크립트의 원래 인수는 명시적으로 전달하지 않는 한 함수 내부에서 접근할 수 없습니다.

반환값

Bash 함수는 다른 언어의 함수처럼 데이터를 직접 반환하지 않습니다. return 명령은 성공 또는 실패를 나타내는 종료 상태(0~255)만 설정합니다. 문자열이나 계산 결과 같은 실제 데이터를 반환하려면 echo 로 결과를 출력하고 함수를 호출할 때 캡처하세요:

result=$(my_function)

유용한 Bash 함수 예제 10선

Bash 함수의 개념과 작성 방법을 이해했다면, 스크립트에 바로 활용할 수 있는 실용적인 예제 10가지를 살펴보겠습니다. 각 함수는 실제로 자주 마주치는 문제를 해결하며, 올바른 구조와 인수 처리, 반환값 사용 방식을 보여줍니다.

1. 파일 백업 함수

임의의 파일에 타임스탬프가 포함된 백업을 생성합니다:

backup_file () {

    local file="$1"

    local backup="${file}.$(date +%Y%m%d_%H%M%S).bak"

    

    if [ -f "$file" ]; then

        cp "$file" "$backup"

        echo "Backup created: $backup"

        return 0

    else

        echo "Error: File not found"

        return 1

    fi

}

 

사용법: backup_file /etc/nginx/nginx.conf

2. 디렉토리 확인기

디렉토리가 존재하는지 확인하고, 없으면 생성합니다:

ensure_dir () {

    local dir="$1"

    

    if [ ! -d "$dir" ]; then

        mkdir -p "$dir"

        echo "Created: $dir"

    fi

}

 

사용법: ensure_dir /var/log/myapp

3. 타임스탬프 로거

디버깅을 위해 로그 메시지에 타임스탬프를 추가합니다:

log_message () {

    local level="$1"

    local message="$2"

    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message"

}

 

사용법: log_message "INFO" "Script started"

4. 디스크 사용량 모니터

디스크 사용량을 확인하고 임계값을 초과하면 경고를 표시합니다:

check_disk_space () {

    local threshold="${1:-80}"

    local usage=$(df / | tail -1 | awk '{print $5}' | tr -d '%')

    

    if [ "$usage" -gt "$threshold" ]; then

        echo "Warning: Disk usage at ${usage}%"

        return 1

    fi

    return 0

}

 

사용법: check_disk_space 90

5. 입력값 유효성 검사기

사용자 입력이 비어 있지 않은지 확인합니다:

validate_input () {

    local input="$1"

    local name="$2"

    

    if [ -z "$input" ]; then

        echo "Error: $name cannot be empty"

        return 1

    fi

    return 0

}

 

사용법: validate_input "$username" "Username"

6. 서비스 상태 확인기

서비스가 실행 중인지 확인하고 상태를 출력합니다:

check_service () {

    local service="$1"

    

    if systemctl is-active –quiet "$service"; then

        echo "$service is running"

        return 0

    else

        echo "$service is not running"

        return 1

    fi

}

 

사용법: check_service nginx

7. 파일 확장자 추출기

파일명에서 확장자를 추출합니다:

get_extension () {

    local filename="$1"

    echo "${filename##*.}"

}

 

사용법: ext=$(get_extension "document.pdf")

8. 문자열 트리머

문자열 앞뒤의 공백을 제거합니다:

trim_string () {

    local str="$1"

    str="${str#"${str%%[![:space:]]*}"}"

    str="${str%"${str##*[![:space:]]}"}"

    echo "$str"

}

 

사용법: clean=$(trim_string " hello world ")

9. 안전한 파일 보관함

파일을 영구 삭제하는 대신 사용자 지정 $HOME/.trash 디렉터리로 이동합니다. 기존 백업을 덮어쓰지 않도록 파일 이름에 타임스탬프를 추가합니다.

safe_remove() {

    local file="$1"

    local trash="$HOME/.trash"

    # 기존 파일 덮어쓰기 방지를 위해 타임스탬프 추가

    local new_name="$(basename "$file")_$(date +%s)"

    

    mkdir -p "$trash"

 

    if [ -e "$file" ]; then

        mv "$file" "$trash/$new_name"

        echo "Moved to archive: $file -> $trash/$new_name"

    else

        echo "Error: $file not found"

        return 1

    fi

}

 

사용법: safe_remove old_script.sh

 

10. 상태 리포터

오류 처리를 위한 Bash 함수 반환 메커니즘을 보여줍니다. Bash 함수의 반환값은 성공(0) 또는 실패(0 이외의 값)를 나타냅니다:

process_data () {

    local file="$1"

    

    if [ ! -f "$file" ]; then

        return 1

    fi

    

    # 파일 처리

    cat "$file" | wc -l

    return 0

}

 

# 반환값 확인

process_data "data.txt"

if [ $? -eq 0 ]; then

    echo "Processing complete"

else

    echo "Processing failed"

fi

 

$? 변수는 마지막으로 실행한 명령이나 함수 호출의 종료 상태를 저장합니다.

함수 역할 주요 특징
backup_file 파일 백업 생성 타임스탬프 기반 파일명
ensure_dir 디렉터리 관리 없으면 자동 생성
log_message 로깅 타임스탬프 접두사
check_disk_space 시스템 모니터링 임계값 초과 알림
validate_input 입력값 유효성 검사 빈 문자열 확인
check_service 서비스 모니터링 Systemd 연동
get_extension 문자열 파싱 매개변수 확장
trim_string 문자열 정리 공백 제거
safe_remove 안전한 삭제 휴지통 디렉터리
process_data 오류 처리 반환값

VPS에서 Bash 함수 실행하기

Bash 함수는 전용 서버 환경에서 실행할 때 진가를 발휘합니다. Cloudzy의 Linux VPS 를 사용하면 셸 환경을 자유롭게 커스터마이징하고, 시스템 전체에서 사용할 함수 라이브러리를 만들고, 제약 없이 서버 관리 작업을 자동화할 수 있도록 완전한 root 권한을 제공합니다.

VPS를 사용하면 /etc/profile.d/ 에 재사용 가능한 함수를 저장해 모든 사용자가 공유할 수 있고, cron 작업으로 함수 기반 스크립트를 예약 실행하고, 배포 및 유지보수를 위한 자동화 파이프라인을 구축할 수 있습니다. Cloudzy는 전 세계 12개 지역에 서버를 운영하며 최대 40 Gbps 네트워크 속도와 DDR5 메모리를 제공합니다. 이를 통해 스크립트 실행 속도가 빨라지고 데이터 처리도 원활해집니다.

이 수준의 제어권 덕분에 VPS는 셸 스크립팅과 시스템 자동화를 진지하게 다루는 모든 사용자에게 적합한 선택입니다.

결론

Bash 함수는 모듈화되고 재사용 가능한 스크립트를 작성하는 핵심 요소입니다. 관련 명령을 하나로 묶고 복잡한 로직을 캡슐화해 코드를 읽고 유지보수하기 쉽게 만들어 줍니다. 클라우드 인프라를 관리하거나 배포 파이프라인을 자동화하거나 일상적인 시스템 관리 작업을 처리할 때, 함수를 활용하면 스크립트를 체계적이고 효율적으로 유지할 수 있습니다.

이 글에서는 Bash 함수의 기본 개념을 다뤘습니다. 함수를 정의하고 호출하는 방법, 실용적인 함수 예제 10가지, 그리고 나만의 자동화 프로젝트를 시작하는 데 도움이 되는 주요 활용 사례를 소개했습니다.

다음과 같은 제어 구조와 함께 사용하면 Bash if 문, 함수는 강력한 자동화를 위한 핵심 구성 요소입니다. Bash 함수를 스크립트에 활용하면 더 깔끔하고 모듈화된 코드를 작성할 수 있어 가독성과 유지보수성이 높아집니다.

자주 묻는 질문

Bash 함수에서 지역 변수를 사용할 수 있나요?

네. Bash 함수에서는 local 키워드를 사용해 지역 변수를 선언할 수 있습니다. 이렇게 하면 변수의 유효 범위가 해당 함수 내로 제한되어, 함수 외부에 동일한 이름의 변수가 있어도 영향을 주지 않습니다.

Bash 함수는 재귀 호출이 가능한가요?

네, Bash 함수는 재귀 호출을 지원합니다. 다만 Bash의 기본 콜 스택 크기가 비교적 작기 때문에, 구현하려는 재귀 함수에 따라 실행 전에 ulimit -s 명령으로 스택 크기를 늘려야 할 수 있습니다.

Bash 함수를 다른 스크립트에서 사용할 수 있나요?

네, source 명령(또는 단축 표기인 .)을 사용하면 스크립트 간에 함수를 공유할 수 있습니다. 함수 정의가 담긴 파일을 source로 불러오면, 해당 함수들을 호출 스크립트에서 바로 사용할 수 있습니다. 자식 프로세스에서 함수를 사용하려면 export -f function_name으로 함수를 내보내야 합니다.

Bash 함수를 파이프라인에서 사용할 수 있나요?

네, 단 외부 명령과 함께 사용할 때는 몇 가지 단계가 필요합니다. 스크립트 내부에서는 데이터를 함수로 직접 파이프할 수 있습니다(예: cat file | my_function). 하지만 xargs나 find -exec는 새로운 환경에서 실행됩니다. 이 경우 함수를 내보내고(export -f my_func), Bash를 명시적으로 호출해야 합니다(예: xargs bash -c 'my_func "$@"').

셸 스크립트 함수란 무엇인가요?

셸 스크립트 함수는 셸 스크립트 내에서 특정 목적을 위해 정의된 코드 블록으로, 스크립트의 여러 곳에서 호출할 수 있습니다. 함수를 사용하면 코드를 모듈화하고 재사용성을 높이며 유지보수를 쉽게 할 수 있습니다. Bash 스크립팅에서 함수는 전체 스크립트 안에 캡슐화된 형태로 존재합니다.

공유

블로그 더 보기

계속 읽기.

Cosmos Cloud로 실행할 수 있는 최고의 셀프 호스팅 앱 - Cosmos 대시보드와 앱 패널 커버 이미지.
서버 및 OS

Cosmos Cloud로 실행할 수 있는 셀프 호스팅 앱 모음: 파일, 미디어, 비밀번호, 자동화 등!

Maybe Cosmos Cloud를 이미 설정했고 어떤 앱이 잘 맞는지 알고 싶거나, 아직 Cosmos를 도입할지 결정하지 못해 실제 워크플로에 얼마나 잘 맞는지 확인하고 싶다면

닉 실버닉 실버 16분 분량
Portainer vs Cosmos Cloud로 Docker 앱 관리하기 — 하이브리드 설정 다이어그램과 운영/접근 블록이 담긴 커버 이미지.
서버 및 OS

Portainer vs Cosmos Cloud: Docker 앱 관리에 적합한 선택은?

Docker를 이미 알고 있고 늘어나는 앱 스택을 더 깔끔하게 운영할 방법을 찾고 있다면, 답은 간단합니다. Portainer vs Cosmos Cloud 중 직접적인 제어 측면에서는 Portainer가 더 나은 선택입니다.

닉 실버닉 실버 14분 분량
Cosmos Cloud vs CasaOS vs Umbrel — 셀프 호스팅의 세 가지 경로를 추상적인 클라우드 네트워크 배경으로 표현한 피처 이미지.
서버 및 OS

Cosmos Cloud vs CasaOS vs Umbrel: 내 환경에 맞는 셀프 호스팅 플랫폼은?

간단히 말하면, CasaOS는 여전히 시작하기 가장 쉬운 선택이고, Umbrel은 큐레이션된 경험이 가장 깔끔하며, 도메인과 설정을 더 세밀하게 제어하고 싶을 때는 Cosmos Cloud가 더 적합합니다.

닉 실버닉 실버 11분 분량

배포할 준비가 됐나요? 월 $2.48부터.

2008년부터 운영해온 독립 클라우드. AMD EPYC, NVMe, 40 Gbps. 14일 환불 보장.