Bash остается одним из самых практичных инструментов для автоматизации. Он встроен почти в любую Linux и macOS систему, не требует дополнительной установки и позволяет решать широкий спектр задач, от простой обработки файлов до полноценного деплоя приложений.
Разберем реальные сценарии, с которыми сталкиваются разработчики, системные администраторы и DevOps-инженеры.
Автоматическое резервное копирование проекта
Одна из самых частых задач это создание бэкапов. Например, нужно ежедневно сохранять копию проекта и базы данных.
Пример скрипта:
#!/bin/bash
PROJECT_DIR="/var/www/app"
BACKUP_DIR="/var/backups/app"
DATE=$(date +%F_%H-%M)
mkdir -p "$BACKUP_DIR/$DATE"
# Копируем файлы проекта
rsync -a --delete "$PROJECT_DIR/" "$BACKUP_DIR/$DATE/files/"
# Делаем дамп базы данных
mysqldump -u root -pYourPassword app_db > "$BACKUP_DIR/$DATE/db.sql"
echo "Backup completed at $DATE"Такой скрипт можно повесить на cron и выполнять автоматически раз в сутки.
Автоматический деплой на сервер
Bash часто используют для упрощения деплоя. Вместо ручного выполнения десятка команд можно запустить один скрипт.
Пример для Laravel-проекта:
#!/bin/bash
echo "Pulling latest changes..."
git pull origin main
echo "Installing dependencies..."
composer install --no-dev --optimize-autoloader
echo "Running migrations..."
php artisan migrate --force
echo "Clearing cache..."
php artisan config:clear
php artisan cache:clear
php artisan route:clear
echo "Deployment completed"Теперь деплой это одна команда:
./deploy.shМониторинг доступности сервиса
Предположим, нужно проверять, работает ли API, и перезапускать сервис при сбое.
#!/bin/bash
URL="http://localhost:8000/health"
SERVICE="myapp"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" $URL)
if [ "$STATUS" != "200" ]; then
echo "Service is down. Restarting..."
systemctl restart $SERVICE
else
echo "Service is healthy"
fiСкрипт можно запускать каждые 5 минут через cron.
Обработка CSV перед загрузкой в базу
Bash удобен для быстрой обработки данных. Например, есть CSV-файл, где нужно удалить пустые строки и отсортировать данные по первому столбцу:
cat data.csv | grep -v '^$' | sort -t',' -k1,1 > cleaned.csvЕсли нужно выбрать только определенные столбцы:
awk -F',' '{print $1","$3}' data.csv > selected_columns.csvТакие операции часто используют перед импортом в MySQL или PostgreSQL.
Очистка логов старше 14 дней
Серверы постепенно заполняются логами. Их можно автоматически удалять:
find /var/log/myapp -type f -mtime +14 -deleteЭто освобождает место на диске без ручного вмешательства.
Массовое переименование файлов
Например, нужно добавить текущую дату ко всем файлам в папке:
for file in *.jpg; do
mv "$file" "$(date +%F)_$file"
doneИли изменить расширение:
for file in *.txt; do
mv "$file" "${file%.txt}.md"
doneПроверка свободного места на диске
Можно сделать простой скрипт с уведомлением:
#!/bin/bash
THRESHOLD=80
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
echo "Disk usage is above $THRESHOLD%"
fiТакой скрипт легко расширяется отправкой email или уведомлением в Telegram.
Работа с Docker
Bash часто используется для управления контейнерами.
Перезапуск всех контейнеров:
docker restart $(docker ps -q)Очистка неиспользуемых образов:
docker image prune -fАвтоматизированный запуск окружения:
#!/bin/bash
docker-compose down
docker-compose pull
docker-compose up -dПростейшая интерактивная утилита
Bash поддерживает ввод от пользователя.
#!/bin/bash
echo "Enter your name:"
read NAME
if [ -z "$NAME" ]; then
echo "Name cannot be empty"
else
echo "Hello, $NAME"
fiДаже такие простые сценарии полезны для внутренних CLI-инструментов.
Когда Bash особенно уместен
Bash подходит, если нужно:
автоматизировать повторяющиеся серверные задачи
объединить несколько CLI-команд в один сценарий
быстро обработать текстовые данные
настроить cron-задачи
управлять инфраструктурой
Если логика становится сложной, появляется работа с API, сложная валидация данных или высокая нагрузка, тогда разумнее перейти на Python, Go или другой язык. Но для системных задач Bash остается быстрым и эффективным инструментом.
Bash — это не просто терминальные команды, а полноценный инструмент автоматизации. Он помогает экономить время, снижать количество ошибок и стандартизировать процессы.
Во многих случаях достаточно 10-20 строк скрипта, чтобы заменить рутинную ручную работу.