Примеры скриптов в Linux
Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.
Текущая статья посвящена скрипты: строгий режим, аргументы, trap, find, curl, backup и типичные ошибки автоматизации..
Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:
- Основы
- Система и сеть
- Данные и разметка
- Код и разработка
- Языки
- Искусственный интеллект
- Проект
- Инфраструктура и безопасность
- Спин-офф
Обязательно пройдитесь.
А теперь приступим к нашему предмету.
Ключевые понятия
| Понятие | Назначение |
|---|---|
#!/usr/bin/env bash |
Запуск интерпретатора bash |
set -euo pipefail |
Выход при ошибке, неопределённой переменной, сбое в pipe |
trap |
Очистка при EXIT, INT, TERM |
getopts |
Разбор коротких опций CLI |
$? |
Код возврата последней команды |
Всегда начинайте production-скрипт с set -euo pipefail. Без этого ошибка в середине пайплайна может остаться незамеченной.
Шаблон production-скрипта
Что проверить
- Запуск с
-hвыводит справку. - Несуществующий
-iдаёт ненулевой код выхода. - Временная папка удаляется даже при
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 или файл.
- Секреты только из окружения, не из кода.