IMCAT.DEV
로그인 가입
Shell 입문 문법

Shell 함수 정의 및 호출

Shell 함수 정의 및 호출 — 초급

함수 정의 및 호출

1. 도입 (왜 배워야 하는가)

Shell 스크립트에서 함수는 코드의 재사용성을 높이고, 프로그램의 구조를 명확히 하는 데 필수적입니다. 실무에서는 여러 작업을 반복적으로 수행해야 할 때, 함수를 사용하여 코드의 중복을 줄이고 유지보수를 용이하게 할 수 있습니다. 만약 함수를 사용하지 않는다면, 같은 코드를 여러 번 작성해야 하며, 이는 코드의 가독성을 떨어뜨리고 수정 시 오류를 유발할 가능성이 높습니다. 예를 들어, 같은 작업을 수행하는 스크립트를 여러 곳에서 작성하면, 하나의 스크립트를 수정할 때 다른 스크립트에 반영하지 못하는 문제가 발생할 수 있습니다.

2. 핵심 개념 설명

함수는 특정 작업을 수행하는 코드 블록으로, 입력값을 받아 처리한 후 결과를 반환하는 구조입니다. 이를 실생활에 비유하자면, "커피를 만드는 과정"이라고 할 수 있습니다. 커피를 만들기 위해서는 물을 끓이고, 커피 가루를 넣고, 컵에 따르는 등의 과정을 거칩니다. 이 모든 과정을 매번 새로 설명하기보다는 "커피 만들기"라는 함수로 묶어 놓으면 필요할 때마다 쉽게 호출하여 사용할 수 있습니다.

용어설명
함수 정의함수를 생성하는 과정
함수 호출정의된 함수를 사용하는 과정
매개변수함수에 전달되는 입력값
반환값함수가 처리 후 돌려주는 값

3. 기본 코드 예제

다음은 Shell에서 함수를 정의하고 호출하는 기본적인 예제입니다.

#!/bin/bash

# 함수를 정의합니다.
greet() {
  echo "안녕하세요, $1!"
}

# 함수를 호출합니다.
greet "홍길동"

실행 결과:

안녕하세요, 홍길동!

코드 한 줄씩 동작 설명:

  1. #!/bin/bash: 이 스크립트가 Bash에서 실행될 것임을 나타냅니다.
  2. greet() { ... }: greet라는 이름의 함수를 정의합니다. 중괄호 {} 안에 함수의 실행 내용이 포함됩니다.
  3. echo "안녕하세요, $1!": 함수가 호출될 때 첫 번째 매개변수 $1을 사용하여 인사 메시지를 출력합니다.
  4. greet "홍길동": greet 함수를 호출하며, "홍길동"을 매개변수로 전달합니다.
  5. 4. 실전 활용 예제

    예제 1: 간단한 계산기

    쇼핑몰에서 가격 계산을 할 때 자주 사용할 수 있습니다.

    #!/bin/bash
    
    # 두 수의 합을 계산하는 함수입니다.
    add() {
      echo $(($1 + $2))
    }
    
    # 함수 호출
    result=$(add 5 10)
    echo "결과: $result"

    상황 설명: 사용자로부터 두 개의 숫자를 입력받아 합산하는 기능을 제공하여, 가격 계산 시 활용할 수 있습니다.

    예제 2: 파일 존재 여부 확인

    서버 관리 시 특정 파일의 존재 여부를 체크할 때 유용합니다.

    #!/bin/bash
    
    # 파일이 존재하는지 확인하는 함수입니다.
    check_file() {
      if [ -e "$1" ]; then
        echo "$1: 파일이 존재합니다."
      else
        echo "$1: 파일이 존재하지 않습니다."
      fi
    }
    
    # 함수 호출
    check_file "test.txt"

    상황 설명: 특정 파일이 존재하는지 확인하여, 서버 스크립트가 올바르게 작동하는지 체크할 수 있습니다.

    5. 흔한 실수와 주의사항

    실수 1: 함수 호출 시 인자 생략

    잘못된 코드:

    greet

    올바른 코드:

    greet "홍길동"

    -> 매개변수를 꼭 전달해야 합니다.

    실수 2: 함수 정의 시 중괄호 누락

    잘못된 코드:

    greet() 
      echo "안녕하세요, $1!"
    }

    올바른 코드:

    greet() {
      echo "안녕하세요, $1!"
    }

    -> 정의 시 중괄호 {}를 반드시 사용해야 합니다.

    6. 정리

    • 함수는 코드 재사용성을 높이고, 유지보수를 용이하게 합니다.
    • 매개변수와 반환값을 통해 함수의 입력과 출력을 정의할 수 있습니다.
    • 올바른 함수 정의 및 호출 방법을 익히는 것이 중요합니다.
    • 다음에 학습하면 좋은 주제는 조건문 및 반복문입니다. 이를 통해 더 복잡한 스크립트를 작성할 수 있습니다.