Какой у вас опыт написания Bash-скриптов для автоматизации?

«Какой у вас опыт написания Bash-скриптов для автоматизации?» — вопрос из категории Linux и командная строка, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Имею опыт написания Bash-скриптов для автоматизации рутинных задач, настройки окружения, CI/CD пайплайнов и обработки данных.

Типичные сценарии использования:

  • Автоматизация сборки и тестирования: Запуск юнит- и интеграционных тестов, сборка проекта.
  • Развёртывание и конфигурация: Подготовка среды, копирование артефактов, управление сервисами.
  • Мониторинг и логи: Проверка доступности сервисов, парсинг и анализ лог-файлов, отправка алертов.
  • Обработка файлов: Пакетное переименование, конвертация, очистка временных данных.

Ключевые инструменты: grep, awk, sed, jq (для JSON), cron (для планировщика).

Пример скрипта для проверки здоровья (health-check) сервиса:

#!/bin/bash
# Strict mode для отлова ошибок
set -euo pipefail

SERVICE_URL="${1:-http://localhost:8080/health}"
TIMEOUT_SEC=5
MAX_RETRIES=3

for ((i=1; i<=MAX_RETRIES; i++)); do
    echo "Попытка $i: Проверка $SERVICE_URL..."
    # Используем timeout и curl для проверки HTTP-статуса
    if HTTP_CODE=$(timeout $TIMEOUT_SEC curl -s -o /dev/null -w "%{http_code}" "$SERVICE_URL"); then
        if [[ "$HTTP_CODE" -eq 200 ]]; then
            echo "УСПЕХ: Сервис доступен (HTTP $HTTP_CODE)."
            exit 0
        else
            echo "ПРЕДУПРЕЖДЕНИЕ: Сервис ответил с кодом $HTTP_CODE."
        fi
    else
        echo "ОШИБКА: Не удалось подключиться к сервису."
    fi
    sleep 2

done

echo "СБОЙ: Сервис недоступен после $MAX_RETRIES попыток."
exit 1

Best practices: Всегда добавлять set -euo pipefail, проверять входные параметры, логировать действия и предусматривать обработку ошибок.