bash-defensive-patterns은(는) 무엇을 하나요?
프로덕션 등급 스크립트를 위한 방어적 Bash 프로그래밍 기술을 마스터하세요. 견고한 셸 스크립트, CI/CD 파이프라인 또는 내결함성과 안전성을 요구하는 시스템 유틸리티를 작성할 때 사용하세요.
방어적 Bash 프로그래밍이 중요한 이유
셸 스크립트는 종종 시스템의 핵심 부분에서 실행됩니다. 단 하나의 처리되지 않은 오류나 예상치 못한 입력이 전체 시스템을 손상시킬 수 있습니다. 방어적 프로그래밍 패턴은 이러한 위험을 완화합니다.
핵심 방어 패턴
1. set -euo pipefail 사용
#!/bin/bash
set -euo pipefail
-e: 명령이 실패하면 즉시 종료합니다.-u: 설정되지 않은 변수를 오류로 처리합니다.-o pipefail: 파이프라인에서 첫 번째 실패한 명령의 종료 코드를 반환합니다.
2. 입력 검증
# 필수 인수 확인
if [[ $# -lt 1 ]]; then
echo "사용법: $0 <인수>"
exit 1
fi
# 특정 패턴과 일치하는지 확인
input="$1"
if [[ ! "$input" =~ ^[a-zA-Z0-9_-]+$ ]]; then
echo "오류: 영숫자, 밑줄, 하이픈만 허용됩니다."
exit 1
fi
3. trap으로 정리
cleanup() {
echo "정리 중..."
rm -f /tmp/임시_파일_$$
}
trap cleanup EXIT ERR
4. 변수 기본값 사용
# 환경 변수에 안전한 기본값
PORT="${PORT:-8080}"
DATABASE_URL="${DATABASE_URL:?DATABASE_URL이 설정되지 않았습니다}"
5. 함수 반환 코드 확인
if ! some_command; then
echo "오류: some_command 실패"
exit 1
fi
권장 사항
- 항상 모든 셸 스크립트 상단에
set -euo pipefail을 추가하세요. - 외부 입력을 검증하고 예상치 못한 데이터를 거부하세요.
trap을 사용하여 임시 파일을 정리하고 리소스를 해제하세요.- 설정되지 않은 변수로 인한 오류 방지를 위해 변수 확장에 기본값을 사용하세요.
참고
이 패턴은 GNU Bash 4.0 이상 및 POSIX sh와 호환됩니다. set -euo pipefail은 POSIX 표준의 일부가 아니므로 일부 파생 셸에서는 동작이 다를 수 있습니다.