함수 정의 방법
쉘 함수는 여러 명령어를 하나의 블록으로 묶어 코드 재사용과 모듈화를 구현하는 프로그래밍 요소입니다.
함수는 이름과 실행 코드로 구성되며, 다음과 같은 세 가지 방식으로 선언할 수 있습니다:
# 형식 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 스크립트명 형식으로 실행하면 실행 과정을 확인할 수 있습니다.