Ответ
Bash-скрипты — это фундаментальный инструмент автоматизации в DevOps для выполнения рутинных операций на Unix-подобных системах (Linux, macOS).
Типичные сценарии использования:
- Автоматизация сборки и деплоя: Запуск сборщиков (Maven, Gradle), копирование артефактов.
- Обработка файлов и логов: Поиск, фильтрация (grep), преобразование (awk, sed), архивация.
- Мониторинг и управление процессами: Проверка статуса служб, перезапуск упавших процессов, сбор метрик.
- Управление инфраструктурой: Взаимодействие с облачными CLI (AWS CLI, gcloud), оркестрация контейнеров (Docker/Podman).
Пример скрипта для сборки и деплоя Java-приложения:
#!/bin/bash
# Strict mode для отлова ошибок
set -euo pipefail
PROJECT_DIR="/opt/myapp"
DEPLOY_DIR="/var/www/app"
echo "Начинаем сборку проекта..."
cd "$PROJECT_DIR"
# Запуск сборки с помощью Maven
mvn clean package -DskipTests
# Поиск и копирование JAR-артефакта
JAR_FILE=$(find target -name "*.jar" -type f | head -n 1)
if [[ -z "$JAR_FILE" ]]; then
echo "Ошибка: JAR-файл не найден!" >&2
exit 1
fi
cp "$JAR_FILE" "$DEPLOY_DIR/app.jar"
echo "Деплой успешно завершён: $DEPLOY_DIR/app.jar"
# Перезапуск системного сервиса
sudo systemctl restart myapp-service
Важные концепции: работа с переменными, аргументами скрипта ($1, $@), условиями (if-else), циклами (for, while), функциями и кодами возврата ($?).
Ответ 18+ 🔞
А, блядь, вот это тема! Bash-скрипты, сука! Это ж как палочка-выручалочка для любого деплоящегося в DevOps, который не хочет каждый раз руками эту хуйню делать. Представь: сидишь ты, такой, и вместо того чтобы двадцать команд в консоли вбивать, пишешь один скрипт — и он всё за тебя делает. Магия, ёпта!
Где эта штука реально спасает жопу:
- Собрать и запихнуть куда надо: Запустил Maven или Gradle, нашёл свежеиспечённый JAR-файл и перетащил его на продакшн. Автоматически, блядь!
- Ковыряться в файлах и логах: Найти нужную строчку в гигабайтном логе (
grep), выдрать оттуда что-то умное (awk,sed) или склеить всё в архив. Руками — пиздец как долго. - Следить, чтобы всё не сдохло: Проверить, жива ли какая-нибудь служба, и если она легла — пнуть её, чтобы встала. Или метрики пособрать.
- Дёргать облака и контейнеры: Через AWS CLI или gcloud накрутить инфраструктуру, а Docker-контейнеры поднять или прибить.
Смотри, как это примерно выглядит в деле, на примере простого скрипта для Java-приложения:
#!/bin/bash
# Включаем строгий режим, чтобы скрипт не молча проебался, а сразу сказал, где накосячил
set -euo pipefail
PROJECT_DIR="/opt/myapp"
DEPLOY_DIR="/var/www/app"
echo "Поехали собирать этот проект, блядь..."
cd "$PROJECT_DIR"
# Мавен, делай своё чёрное дело, только тесты пропусти
mvn clean package -DskipTests
# Теперь ищем, какой же JAR-файл этот умник нам нагенерил
JAR_FILE=$(find target -name "*.jar" -type f | head -n 1)
if [[ -z "$JAR_FILE" ]]; then
echo "Ошибка: JAR-файл, сука, не найден! Что собирал-то?" >&2
exit 1
fi
# Нашли — копируем куда надо
cp "$JAR_FILE" "$DEPLOY_DIR/app.jar"
echo "Всё, задеплоили! Лежит тут: $DEPLOY_DIR/app.jar"
# И сервис перезапускаем, чтобы изменения подхватились
sudo systemctl restart myapp-service
А теперь, чтобы не быть полным ламером, надо врубиться в основные штуки:
Как с переменными работать (MY_VAR="value"), как аргументы скрипта ловить ($1 — первый аргумент, $@ — все сразу). Как условия писать (if [[ -f file.txt ]]; then...), как циклы гонять (for i in {1..5}; do...). Как свои функции объявлять и, самое главное, как проверять, что предыдущая команда не обосралась — через код возврата $?. Если ноль — всё заебись, если не ноль — пошло что-то не так.
Короче, выучишь это — и рутина перестанет быть пиздецом какой рутиной.