На главную

Shell и скрипты

Каркас bash-скрипта

Каркас bash-скрипта: строгий режим, разбор коротких и длинных опций с --help, проверка зависимостей и прав, временный каталог с уборкой по trap, логирование с цветом и режим сухого прогона.

Скрипт

Например: ЦЕЛЬ

Через пробел: jq rsync

Опции

Скрипт

#!/usr/bin/env bash
# Выкладывает сборку на сервер

set -euo pipefail
IFS=$'\n\t'

SCRIPT_NAME="$(basename "$0")"
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"

if [[ -t 2 ]]; then
  C_RED=$'\033[31m'; C_YELLOW=$'\033[33m'; C_GREEN=$'\033[32m'; C_RESET=$'\033[0m'
else
  C_RED=""; C_YELLOW=""; C_GREEN=""; C_RESET=""
fi

log()  { printf '%s %s\n' "$(date +%H:%M:%S)" "$*" >&2; }
info() { printf '%s ${C_GREEN}%s${C_RESET}\n' "$(date +%H:%M:%S)" "$*" >&2; }
warn() { printf '%s ${C_YELLOW}%s${C_RESET}\n' "$(date +%H:%M:%S)" "$*" >&2; }
die()  { printf '%s ${C_RED}%s${C_RESET}\n' "$(date +%H:%M:%S)" "$*" >&2; exit 1; }

ENV=""
VERBOSE=0
DRY_RUN=0

usage() {
  cat <<EOF
Использование: $SCRIPT_NAME [опции]
Выкладывает сборку на сервер

Опции:
  -e, --env ЗНАЧЕНИЕ               окружение: prod или stage
  -v, --verbose           подробный вывод
  -n, --dry-run           показать, что будет сделано, и выйти
  -h, --help              эта справка
EOF
}

while [[ $# -gt 0 ]]; do
  case "$1" in
    -e|--env) ENV="${2:?env: нужно значение}"; shift 2 ;;
    -v|--verbose) VERBOSE=1; shift ;;
    -n|--dry-run) DRY_RUN=1; shift ;;
    -h|--help) usage; exit 0 ;;
    --) shift; break ;;
    -*) usage; die "Неизвестная опция: $1" ;;
    *) break ;;
  esac
done

[[ -n "${ENV}" ]] || { usage; die "--env обязателен"; }

for cmd in rsync; do
  command -v "$cmd" >/dev/null 2>&1 || die "Нужна программа: $cmd"
done

TMP_DIR="$(mktemp -d)"
cleanup() { rm -rf "$TMP_DIR"; }
trap cleanup EXIT INT TERM

main() {
  if [[ $DRY_RUN -eq 1 ]]; then
    info "Сухой прогон: ничего не меняем"
    return 0
  fi
  info "Работаю в $SCRIPT_DIR"
  # здесь ваш код
}

main "$@"