На главную
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 "$@"