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

셸 스크립트 실전 기초

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

목차
  1. 스크립트 기본 구조
  2. 변수
  3. 조건문
  4. 반복문
  5. 함수
  6. 에러 처리

스크립트 기본 구조

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)

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