함수 정의와 리턴
Bash
# 기본 함수
greet() {
local name="$1" # local로 스코프 제한
echo "Hello, $name"
}
greet "World"
# 리턴값 (exit code 방식)
is_root() {
[[ $EUID -eq 0 ]] # 0이면 true, 1이면 false
}
if is_root; then echo "root입니다"; fi
# stdout으로 값 반환
get_date() {
date +%Y%m%d
}
TODAY=$(get_date)
echo "$TODAY"배열 조작
Bash
# 선언과 접근
fruits=("apple" "banana" "cherry")
echo "${fruits[0]}" # apple
echo "${fruits[@]}" # 전체
echo "${#fruits[@]}" # 길이: 3
# 추가·삭제
fruits+=("grape")
unset fruits[1] # banana 삭제
# 순회
for fruit in "${fruits[@]}"; do
echo "$fruit"
done
# 연관 배열 (Bash 4+)
declare -A config
config[host]="localhost"
config[port]="5432"
echo "${config[host]}:${config[port]}"getopts로 옵션 파싱
Bash
#!/usr/bin/env bash
usage() {
echo "Usage: $0 [-h] [-n NAME] [-v]"
exit 1
}
VERBOSE=false
NAME=""
while getopts ":hn:v" opt; do
case $opt in
h) usage ;;
n) NAME="$OPTARG" ;;
v) VERBOSE=true ;;
:) echo "Option -$OPTARG requires an argument"; exit 1 ;;
?) echo "Unknown option: -$OPTARG"; exit 1 ;;
esac
done
shift $((OPTIND - 1)) # 남은 positional args
echo "Name: $NAME, Verbose: $VERBOSE"
echo "Remaining args: $*"trap으로 신호 처리
Bash
# 임시 파일 정리 패턴
TMPFILE=$(mktemp)
trap 'rm -f "$TMPFILE"; echo "Cleaned up"; exit' EXIT INT TERM
# 작업 수행
echo "data" > "$TMPFILE"
sleep 10 # Ctrl+C 눌러도 TMPFILE 자동 삭제됨
# 디버그 트레이스
trap 'echo "Line $LINENO: $BASH_COMMAND"' DEBUG실전 패턴 모음
Bash
# 엄격 모드 (항상 권장)
set -euo pipefail
# 색상 출력
RED='\033[0;31m'; GREEN='\033[0;32m'; NC='\033[0m'
echo -e "${GREEN}OK${NC} 작업 완료"
echo -e "${RED}ERROR${NC} 실패"
# 재시도 함수
retry() {
local n=0; local max=3; local delay=5
until "$@"; do
n=$((n+1))
[[ $n -ge $max ]] && { echo "Failed after $max attempts"; return 1; }
echo "Retry $n/$max in ${delay}s..."; sleep $delay
done
}
retry curl -sf https://example.com
# 로그 함수
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a /var/log/myscript.log
}
log "Started"heredoc으로 설정 파일 생성
Bash
cat > /etc/myapp/config.conf << EOF
host=${DB_HOST:-localhost}
port=${DB_PORT:-5432}
user=${DB_USER:-app}
EOF
# 변수 치환 없이 그대로 쓰려면
cat > script.sh << 'EOF'
echo "$PATH" # 그대로 출력됨 (치환 안 함)
EOF편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서GNU/Linux man 페이지 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.