DevLearn logo
Skill Up With Me
Interactive Learning
Signing in…

Продвинутый Bash: автоматизация рутинных задач

🔒 Sign in to use this
Продвинутый Bash: автоматизация рутины

Скрипты оболочки связывают утилиты, API и файлы. Урок про strict mode, конвейеры, циклы, `find` + `xargs`, cron и когда пора перейти на Python или Ansible.

Структура урока: code-explorer — обязательный префикс скрипта. Pipeline — классическая цепочка обработки текста. Вкладки — безопасный обход файлов и cron. Карточки — Bash vs другой язык.

Начните скрипт с ограждений

Без `set -euo pipefail` ошибка в середине конвейера или теста `[[` может остаться незамеченной. pipefail обязателен: иначе успех определяется только последней командой в `|`.

Строка за строкой: shebang → режим ошибок → IFS. Пояснения — почему молчаливые сбои в shell — норма по умолчанию.
bash
1
#!/usr/bin/env bash
2
set -euo pipefail
3
IFS=$'\n\t'
4
# ... команды ...
Поток данных в конвейере

Конвейер соединяет stdout одной программы с stdin следующей. Философия Unix: маленькие инструменты, композиция. `| tee log.txt` — и в файл, и дальше по pipe.

Виджет pipeline: слева направо — поток байт. grep отбирает строки, awk режет поля, sort | uniq считает частоты. В конце перенаправление — не забывайте `2>&1` для логов.

Байты идут слева направо; SIGPIPE, если правый процесс закрыл stdin раньше времени.
📄
Источник
cat, tail -f, journalctl
🔍
grep -E
фильтр / regex
✂️
awk / cut
поля
📊
sort | uniq
частоты
📁
>
файл или дальше
find и xargs
Пути под /var/log
bash
find /var/log -type f -name '*.log' -print0 | \
  xargs -0 -I{} ls -lh {}
Параллельно (осторожно)
bash
find . -type f -name '*.txt' -print0 | \
  xargs -0 -P 4 gzip
Когда хватит Bash

Bash хорош как клей вокруг уже существующих CLI. Вложенный JSON и сложная логика — зона `jq`, Python или специализированных инструментов.

Слева — сценарии «вызвать программы»; справа — «держать состояние и протоколы». Если нужны юнит-тесты логики, не только интеграция — уходите из чистого shell.
Bash уместен
⚠️
Лучше Python/Go/Ansible

Привычки против ночных звонков

Всегда "$var", не $var. После сложного конвейера без pipefail проверяйте PIPESTATUS. Сообщения в stderr (echo >&2). Длинные скрипты режьте на функции с local.
shellcheck в IDE или CI — незакавыченные переменные, отсутствие shebang.
curl | bash с произвольного URL — риск цепочки поставки; проверяйте хеш или источник.
Для find в цикле: -print0 и read -d '' против кривых имён файлов.
⚠️Запуск от root усугубляет ошибки: минимальные права, сначала тест в ВМ или контейнере.
🔒 Sign in to use this