/엔지니어/Linux / Shell/셸 스크립트 실전 기초
Linux / Shell중급ubuntucentosmacosbashshellscript

셸 스크립트 실전 기초

변수, 조건문, 반복문, 함수, 에러 처리까지 실무에서 바로 쓸 수 있는 bash 스크립트 작성법을 설명합니다.

스크립트 기본 구조

Bash
#!/bin/bash
set -euo pipefail

main() {
  echo "스크립트 시작"
}

main "$@"

변수

Bash
NAME="SecuThive"
echo "안녕, $NAME"
echo '값: $NAME'           # 작은따옴표는 문자 그대로

readonly VERSION="1.0.0"
PORT="${PORT:-8080}"       # 기본값 설정

SERVERS=("web1" "web2" "web3")
echo "${SERVERS[0]}"       # web1
echo "${#SERVERS[@]}"      # 원소 개수

조건문

Bash
FILE="/etc/nginx/nginx.conf"

if [[ -f "$FILE" ]]; then
  echo "파일 존재"
elif [[ -d "$FILE" ]]; then
  echo "디렉터리"
else
  echo "없음"
fi

if [[ "$ENV" == "production" ]]; then
  echo "운영 환경"
fi

if [[ $COUNT -gt 10 ]]; then
  echo "10 초과"
fi

파일 테스트 연산자

표현식의미
-f FILE일반 파일 존재
-d DIR디렉터리 존재
-e PATH경로 존재
-r FILE읽기 권한 있음
-z STRING문자열이 비어있음
-n STRING문자열이 비어있지 않음

반복문

Bash
for server in "${SERVERS[@]}"; do
  echo "배포: $server"
  ssh "$server" "sudo systemctl restart myapp"
done

for i in {1..5}; do
  echo "시도 $i"
done

COUNT=0
while [[ $COUNT -lt 3 ]]; do
  echo "대기 중..."
  sleep 1
  ((COUNT++))
done

함수

Bash
log() {
  local level="$1"
  local msg="$2"
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $msg"
}

check_service() {
  local service="$1"
  if systemctl is-active --quiet "$service"; then
    log "INFO" "$service 실행 중"
    return 0
  else
    log "ERROR" "$service 중지됨"
    return 1
  fi
}

check_service nginx || exit 1

에러 처리

Bash
if ! rsync -av /src/ user@host:/dest/; then
  log "ERROR" "rsync 실패"
  exit 1
fi

TMPFILE=$(mktemp)
trap 'rm -f "$TMPFILE"; echo "정리 완료"' EXIT
trap 'echo "에러 발생: 줄 $LINENO"' ERR
#bash#shell#script#자동화#스크립트
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서GNU/Linux man 페이지

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.