В каких случаях будете использовать foreach, а в каких count? Приведите пример на Bash или Python.

«В каких случаях будете использовать foreach, а в каких count? Приведите пример на Bash или Python.» — вопрос из категории Скриптинг и автоматизация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В скриптах для автоматизации инфраструктуры выбор зависит от задачи:

Использую foreach (или цикл for), когда нужно выполнить операцию с каждым элементом коллекции (списка файлов, имен хостов, выходных данных команды).

  • Пример на Bash (перебор файлов в директории):
    # Применить chmod ко всем .sh файлам в директории
    for script in /opt/scripts/*.sh; do
        echo "Setting execute permissions for: $script"
        chmod +x "$script"
    done
  • Пример на Python (обработка списка IP-адресов):
    # Проверить доступность хостов
    hosts = ['10.0.0.1', '10.0.0.2', '10.0.0.3']
    for host in hosts:
        response = os.system(f"ping -c 1 {host} > /dev/null 2>&1")
        if response == 0:
            print(f"{host} is UP")
        else:
            print(f"{host} is DOWN")

Использую count (или len(), wc -l), когда нужно принять решение на основе количества элементов, а не их содержимого.

  • Пример на Bash (проверка количества запущенных контейнеров):
    # Если контейнеров больше 10, отправить алерт
    container_count=$(docker ps -q | wc -l)
    if [[ $container_count -gt 10 ]]; then
        echo "WARNING: High container count: $container_count" | mail -s "Alert" admin@example.com
    fi
  • Пример на Python (валидация входных аргументов скрипта):
    import sys
    # Скрипт ожидает ровно 2 аргумента
    if len(sys.argv) != 3:
        print(f"Usage: {sys.argv[0]} <config_path> <environment>")
        sys.exit(1)
    config_path, env = sys.argv[1], sys.argv[2]

Ключевое правило: count (или его аналоги) для проверки размера, foreach — для итерации и действий над элементами.