Примеры скриптов в Linux

Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.

Текущая статья посвящена скрипты: строгий режим, аргументы, trap, find, curl, backup и типичные ошибки автоматизации..

Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:

  1. Основы
  2. Система и сеть
  3. Данные и разметка
  4. Код и разработка
  5. Языки
  6. Искусственный интеллект
  7. Проект
  8. Инфраструктура и безопасность
  9. Спин-офф

Обязательно пройдитесь.

А теперь приступим к нашему предмету.


Ключевые понятия

Понятие Назначение
#!/usr/bin/env bash Запуск интерпретатора bash
set -euo pipefail Выход при ошибке, неопределённой переменной, сбое в pipe
trap Очистка при EXIT, INT, TERM
getopts Разбор коротких опций CLI
$? Код возврата последней команды
Строгий режим

Всегда начинайте production-скрипт с set -euo pipefail. Без этого ошибка в середине пайплайна может остаться незамеченной.


Шаблон production-скрипта


Что проверить

  1. Запуск с -h выводит справку.
  2. Несуществующий -i даёт ненулевой код выхода.
  3. Временная папка удаляется даже при Ctrl+C.

Сценарий: health-check URL

Разбор флагов -fsS, -w и полный скрипт с комментариями — curl / fetch — API-запросы (раздел health-check).

Шаги: сохраните как healthcheck.sh, chmod +x, добавьте в cron или systemd timer.


Сценарий: безопасный обход файлов

find /var/log/myapp -type f -name '*.log' -print0 \
  | xargs -0 -r gzip -9

Используйте -print0 и xargs -0 для имён с пробелами и спецсимволами.


Сценарий: ротация бэкапа

#!/usr/bin/env bash
set -euo pipefail
SRC="${1:?source dir}"
DST="${2:?backup dir}"
STAMP="$(date +%Y%m%d_%H%M%S)"
TARGET="$DST/backup_$STAMP"

mkdir -p "$TARGET"
rsync -a --delete "$SRC/" "$TARGET/"

Типичные ошибки

Ошибка Последствие Исправление
for f in $(ls) Слом на пробелах в именах find … -print0 | xargs -0
Без кавычек "$var" Разбиение путей Всегда "$var"
Игнорирование $? Ложный успех set -e или явная проверка
curl без таймаута Зависание cron --max-time

Чек-лист перед продакшеном

  • shellcheck script.sh без критичных замечаний.
  • Скрипт идемпотентен (повторный запуск безопасен).
  • Логи пишутся в stdout/stderr или файл.
  • Секреты только из окружения, не из кода.