Привет! Похоже, что в твоём скрипте есть несколько ошибок, из-за которых он не работает в цикле. Давай посмотрим, как можно это исправить:
Убедись, что имена переменных и конструкция цикла правильные. Переменная Hosts должна содержать список серверов.
Есть небольшая ошибка в синтаксисе цикла for. Ты должен использовать $() для получения значения переменной в Bash.
Также обратите внимание на использование кавычек вокруг переменных и команд.
Вот переработанная версия твоего скрипта:
#!/bin/bash
# Читаем список серверов
Hosts=$(cat list_of_server)
# Пробегаем по каждому серверу из списка
for host in $Hosts; do
# Извлекаем содержимое из xml-шаблона, заменяем строку и сохраняем в новый файл
xmllint ssh_template.xml | sed "s/UserName>.*:SSH/UserName>$host/" > "$host.xml"
done
Изменения:
Убедитесь, что for работает по каждому элементу списка; используйте $Hosts, а не Hosts.
Убедитесь, что команда sed получает входные данные корректно из xmllint.
Используйте правильные кавычки для команд и переменных.
Проверь, соответствует ли твой list_of_server правильному формату (т.е. сервера записаны в столбик). Надеюсь, это решит твои проблемы. Удачи! . Я ответил на ваш вопрос?