쉘 스크립트 간략 소개
쉘 스크립트 간략 소개입니다. 기본 골격, set -euo pipefail, 인자 처리, 함수/로그, 반복문, 임시 파일, 문법 검사와 운영 기준을 정리했습니다.
쉘 스크립트는 Linux/Unix 환경에서 반복 작업을 자동화하는 가장 기본적인 도구입니다. 단순 명령어 모음으로 시작할 수 있지만, 운영에서 쓰는 스크립트는 입력값, 오류 처리, 로그, 권한, 재실행 가능성을 함께 고려해야 합니다.
기본 골격
#!/usr/bin/env bash
set -euo pipefail
main() {
echo "hello shell script"
}
main "$@"
set -euo pipefail은 오류를 빨리 드러내는 데 도움이 됩니다. 다만 일부 명령은 0이 아닌 exit code가 정상 흐름일 수 있으므로 조건문으로 의도를 명확히 처리합니다.
인자 처리
#!/usr/bin/env bash
set -euo pipefail
if [[ $# -lt 1 ]]; then
echo "usage: $0 <service-name>" >&2
exit 2
fi
SERVICE_NAME="$1"
systemctl status "$SERVICE_NAME" --no-pager
변수는 대부분 큰따옴표로 감싸야 공백이나 특수문자 때문에 명령이 깨지지 않습니다.
함수와 로그
log() {
printf '[%s] %s\n' "$(date --iso-8601=seconds)" "$*"
}
die() {
log "ERROR: $*"
exit 1
}
command -v curl >/dev/null 2>&1 || die "curl not found"
log "curl exists"
반복문
for host in web01 web02 db01; do
echo "checking ${host}"
ping -c 1 -W 2 "$host" >/dev/null && echo "up" || echo "down"
done
파일 읽기
while IFS= read -r host; do
[[ -z "$host" || "$host" =~ ^# ]] && continue
ping -c 1 -W 2 "$host" >/dev/null && echo "$host up" || echo "$host down"
done < hosts.txt
임시 파일과 정리
TMP_FILE="$(mktemp)"
cleanup() {
rm -f "$TMP_FILE"
}
trap cleanup EXIT
df -h > "$TMP_FILE"
cat "$TMP_FILE"
운영 스크립트에서 /tmp/fixed-name 같은 고정 임시 파일을 쓰면 충돌이나 권한 문제가 생길 수 있습니다. mktemp와 trap을 같이 사용합니다.
운영 스크립트 기준
- 실행 전에 대상과 영향 범위를 출력합니다.
- 삭제/재시작/방화벽 변경 같은 작업은 dry-run 옵션을 둡니다.
- secret을 script 안에 하드코딩하지 않습니다.
- 로그에는 토큰, password, 개인키 내용을 남기지 않습니다.
- 반복 실행해도 같은 결과가 나오도록 idempotent하게 작성합니다.
문법 검사와 포맷
bash -n script.sh
shellcheck script.sh
chmod +x script.sh
./script.sh