Антон Ларичев

Введение
Bash-скрипты для автоматизации рутины — один из самых эффективных способов сэкономить время разработчика. Каждый день мы выполняем десятки повторяющихся действий: проверяем логи, делаем бэкапы, деплоим код, чистим временные файлы. Всё это можно автоматизировать с помощью простых bash-скриптов.
В этой статье собраны 10 готовых скриптов для автоматизации рутинных задач, которые можно сразу использовать в своих проектах. Каждый скрипт снабжён комментариями и легко адаптируется под конкретные нужды.
Скрипт для быстрого бэкапа проекта
Резервное копирование проекта — задача, которую легко забыть. Этот bash-скрипт создаёт архив с датой в имени файла и удаляет старые бэкапы.
#!/bin/bash
# Бэкап проекта с ротацией старых копий
PROJECT_DIR="$1"
BACKUP_DIR="$HOME/backups"
DATE=$(date +%Y-%m-%d_%H-%M)
NAME=$(basename "$PROJECT_DIR")
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/${NAME}_${DATE}.tar.gz" -C "$(dirname "$PROJECT_DIR")" "$NAME"
# Удаляем бэкапы старше 30 дней
find "$BACKUP_DIR" -name "${NAME}_*.tar.gz" -mtime +30 -delete
echo "Бэкап создан: ${NAME}_${DATE}.tar.gz"
Запуск: ./backup.sh /path/to/project. Добавьте в cron для ежедневного выполнения.
Автоматизация Git: создание ветки и коммита
При работе с Git часто нужно создать ветку по номеру задачи, сделать коммит и запушить. Скрипт автоматизирует этот процесс.
#!/bin/bash
# Быстрое создание ветки по номеру задачи
TASK_ID="$1"
DESCRIPTION="$2"
if [ -z "$TASK_ID" ] || [ -z "$DESCRIPTION" ]; then
echo "Использование: ./gitflow.sh TASK-123 \"описание задачи\""
exit 1
fi
BRANCH="feature/${TASK_ID}-$(echo "$DESCRIPTION" | tr ' ' '-' | tr '[:upper:]' '[:lower:]')"
git checkout -b "$BRANCH"
echo "Создана ветка: $BRANCH"
Как автоматизировать коммиты в Git с помощью Bash
Можно расширить скрипт, добавив автоматический коммит всех изменений:
#!/bin/bash
# Коммит с автоформатированием сообщения
TYPE="${1:-fix}" # fix, feat, refactor, docs
MESSAGE="$2"
if [ -z "$MESSAGE" ]; then
echo "Использование: ./commit.sh feat \"добавлена авторизация\""
exit 1
fi
git add -A
git commit -m "${TYPE}: ${MESSAGE}"
echo "Коммит создан: ${TYPE}: ${MESSAGE}"
Скрипт очистки логов и временных файлов
Логи и временные файлы могут занимать гигабайты дискового пространства. Этот скрипт находит и удаляет устаревшие файлы.
#!/bin/bash
# Очистка логов старше N дней
LOG_DIRS=("/var/log/app" "$HOME/projects/*/logs")
DAYS=${1:-7}
TOTAL=0
for DIR in ${LOG_DIRS[@]}; do
for PATTERN in "*.log" "*.tmp" "*.cache"; do
COUNT=$(find $DIR -name "$PATTERN" -mtime +$DAYS 2>/dev/null | wc -l)
TOTAL=$((TOTAL + COUNT))
find $DIR -name "$PATTERN" -mtime +$DAYS -delete 2>/dev/null
done
done
echo "Удалено файлов: $TOTAL (старше $DAYS дней)"
Мониторинг состояния сервера
Простой скрипт для проверки загрузки CPU, памяти и диска. Отправляет уведомление, если ресурсы на исходе.
#!/bin/bash
# Мониторинг ресурсов сервера
DISK_THRESHOLD=90
MEM_THRESHOLD=85
DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
MEM_USAGE=$(free | awk '/Mem:/ {printf "%.0f", $3/$2*100}')
ALERT=""
[ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ] && ALERT+="Диск: ${DISK_USAGE}%\n"
[ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ] && ALERT+="Память: ${MEM_USAGE}%\n"
if [ -n "$ALERT" ]; then
echo -e "ВНИМАНИЕ!\n$ALERT" | mail -s "Сервер: ресурсы" admin@example.com
fi
Bash-скрипт для автоматического деплоя
Деплой через SSH с проверкой статуса — одна из самых частых задач автоматизации.
#!/bin/bash
# Деплой приложения на удалённый сервер
SERVER="user@production-server"
APP_DIR="/var/www/app"
BRANCH="${1:-main}"
echo "Деплой ветки $BRANCH..."
ssh "$SERVER" << EOF
cd $APP_DIR
git fetch origin
git checkout $BRANCH
git pull origin $BRANCH
npm install --production
pm2 restart app
EOF
[ $? -eq 0 ] && echo "Деплой завершён" || echo "ОШИБКА деплоя!"
Скрипт для проверки доступности сервисов
Мониторинг доступности ваших сервисов с записью результатов в лог.
#!/bin/bash
# Проверка доступности URL-адресов
URLS=("https://api.example.com/health" "https://app.example.com" "https://cdn.example.com")
LOG="/var/log/health-check.log"
for URL in "${URLS[@]}"; do
STATUS=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$URL")
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
if [ "$STATUS" -ne 200 ]; then
echo "[$TIMESTAMP] FAIL $URL (HTTP $STATUS)" >> "$LOG"
fi
done
Автоматическая настройка окружения разработчика
При подключении нового разработчика к проекту нужно установить зависимости, настроить переменные окружения и запустить миграции.
#!/bin/bash
# Инициализация dev-окружения проекта
echo "Настройка окружения..."
# Копируем шаблон переменных окружения
[ ! -f .env ] && cp .env.example .env && echo ".env создан из шаблона"
# Устанавливаем зависимости
npm install
# Запускаем миграции БД
npm run migration:run
# Генерируем типы
npm run generate
echo "Окружение готово! Запуск: npm run dev"
Скрипт массового поиска и замены в проекте
Когда нужно переименовать переменную, URL или путь во всём проекте, grep и sed справятся за секунды.
#!/bin/bash
# Поиск и замена строки во всех файлах проекта
OLD_STRING="$1"
NEW_STRING="$2"
DIR="${3:-.}"
if [ -z "$OLD_STRING" ] || [ -z "$NEW_STRING" ]; then
echo "Использование: ./replace.sh \"старый текст\" \"новый текст\" [директория]"
exit 1
fi
COUNT=$(grep -rl "$OLD_STRING" "$DIR" --include='*.ts' --include='*.js' --include='*.json' | wc -l)
grep -rl "$OLD_STRING" "$DIR" --include='*.ts' --include='*.js' --include='*.json' | \
xargs sed -i "s|$OLD_STRING|$NEW_STRING|g"
echo "Заменено в $COUNT файлах: '$OLD_STRING' -> '$NEW_STRING'"
Docker: очистка неиспользуемых ресурсов
Docker быстро накапливает неиспользуемые образы, контейнеры и тома. Скрипт автоматизирует очистку.
#!/bin/bash
# Очистка Docker-ресурсов
echo "Остановка завершённых контейнеров..."
docker container prune -f
echo "Удаление неиспользуемых образов..."
docker image prune -a -f --filter "until=168h"
echo "Очистка неиспользуемых томов..."
docker volume prune -f
echo "Очистка сети..."
docker network prune -f
# Показываем освобождённое место
docker system df
Скрипт генерации отчёта по проекту
Полезный скрипт, который собирает статистику по проекту: количество файлов, строк кода, последние коммиты.
#!/bin/bash
# Генерация отчёта по проекту
PROJECT="${1:-.}"
echo "=== Отчёт по проекту: $(basename $(realpath $PROJECT)) ==="
echo "Дата: $(date '+%Y-%m-%d %H:%M')"
echo ""
# Количество файлов по типам
echo "Файлы по типам:"
for EXT in ts js tsx jsx json css; do
COUNT=$(find "$PROJECT" -name "*.$EXT" -not -path '*/node_modules/*' | wc -l)
[ "$COUNT" -gt 0 ] && echo " .$EXT: $COUNT"
done
# Общее количество строк кода
LINES=$(find "$PROJECT" -name '*.ts' -o -name '*.js' | \
grep -v node_modules | xargs wc -l 2>/dev/null | tail -1 | awk '{print $1}')
echo "\nСтрок кода (TS/JS): $LINES"
# Последние 5 коммитов
echo "\nПоследние коммиты:"
git -C "$PROJECT" log --oneline -5 2>/dev/null || echo " (не git-репозиторий)"
Частые ошибки при написании Bash-скриптов
При автоматизации рутины с помощью bash-скриптов разработчики часто допускают типичные ошибки:
- Отсутствие кавычек вокруг переменных — приводит к проблемам с пробелами в путях. Всегда используйте
"$VAR"вместо$VAR - Забытый
set -e— без него скрипт продолжит выполнение после ошибки. Добавляйтеset -euo pipefailв начало скрипта - Жёстко заданные пути — используйте переменные и параметры вместо абсолютных путей
- Отсутствие проверки входных параметров — всегда проверяйте, что обязательные аргументы переданы
Заключение
Bash-скрипты для автоматизации рутины экономят разработчику часы работы каждую неделю. Мы разобрали 10 готовых скриптов: от бэкапов и деплоя до мониторинга и очистки Docker. Каждый из них можно использовать как есть или адаптировать под свой рабочий процесс. Начните с одного скрипта, добавьте его в cron — и рутинные задачи перестанут отнимать ваше время.






Комментарии
0