Bash / Shell
Строгий режим и шаблон скрипта
Стартовый каркас: аварийное завершение при ошибках, обработка сигналов, разбор аргументов, логирование.
Код
#!/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"