Как оцениваешь свой уровень в Bash?

«Как оцениваешь свой уровень в Bash?» — вопрос из категории Софт-скиллы, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Мой уровень в Bash — продвинутый. Я регулярно пишу скрипты для автоматизации рутинных операций в инфраструктуре, CI/CD пайплайнах и для администрирования серверов.

Что я умею и применяю на практике:

  • Написание надежных и безопасных скриптов с обязательным использованием set -euo pipefail и обработкой сигналов через trap.
  • Сложная обработка текста с awk, sed и регулярными выражениями в условиях [[ "$var" =~ regex ]].
  • Работа с массивами и ассоциативными массивами для структурирования данных.
  • Организация параллельного выполнения задач с использованием &, wait и именованных каналов (fifo).
  • Парсинг и валидация аргументов командной строки, в том числе с помощью getopts.

Пример скрипта для проверки доступности набора эндпоинтов:

#!/usr/bin/env bash
set -euo pipefail

endpoints=(
  "https://api.service.com/health"
  "https://auth.service.com/ready"
  "tcp://db.service.com:5432"
)

declare -A results

for endpoint in "${endpoints[@]}"; do
  if [[ "$endpoint" =~ ^https?:// ]]; then
    if curl -f -s --max-time 5 "$endpoint" > /dev/null; then
      results["$endpoint"]="OK"
    else
      results["$endpoint"]="FAIL"
    fi
  elif [[ "$endpoint" =~ ^tcp:// ]]; then
    host_port="${endpoint#tcp://}"
    if timeout 2 bash -c "cat < /dev/null > /dev/tcp/${host_port//://}" 2>/dev/null; then
      results["$endpoint"]="OK"
    else
      results["$endpoint"]="FAIL"
    fi
  fi
done

for endpoint in "${!results[@]}"; do
  printf "%-40s %sn" "$endpoint" "${results[$endpoint]}"
done

Я осознаю ограничения Bash для сложной логики и знаю, когда стоит переключиться на Python.