Bash / Shell

Строгий режим и шаблон скрипта

Algonexys · 07.08.2026 · 👁 0

Стартовый каркас: аварийное завершение при ошибках, обработка сигналов, разбор аргументов, логирование.

Код

#!/usr/bin/env bash
# Шаблон надёжного bash-скрипта.
set -Eeuo pipefail          # выход при ошибке, необъявленной переменной и ошибке в конвейере
IFS=$'\n\t'

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

log()  { printf '%s [%s] %s\n' "$(date '+%F %T')" "${1}" "${*:2}" >&2; }
info() { log INFO "$@"; }
die()  { log ERROR "$@"; exit 1; }

cleanup() {
    local code=$?
    [[ -n "${TMPDIR_WORK:-}" ]] && rm -rf "$TMPDIR_WORK"
    exit "$code"
}
trap cleanup EXIT
trap 'die "Прервано на строке $LINENO"' ERR

usage() {
    cat <<EOF
Использование: $(basename "$0") [-v] [-o ФАЙЛ] ПУТЬ
  -o ФАЙЛ   файл результата (по умолчанию result.txt)
  -v        подробный вывод
  -h        эта справка
EOF
}

OUTPUT="result.txt"; VERBOSE=0
while getopts ":o:vh" opt; do
    case "$opt" in
        o) OUTPUT="$OPTARG" ;;
        v) VERBOSE=1 ;;
        h) usage; exit 0 ;;
        *) usage; exit 1 ;;
    esac
done
shift $((OPTIND - 1))
[[ $# -ge 1 ]] || { usage; exit 1; }

TMPDIR_WORK="$(mktemp -d)"
command -v jq >/dev/null || die "Требуется jq"

info "Обрабатываю $1 → $OUTPUT"