Хорошо, у меня есть скрипт, который я пишу на bash для облачного литейного производства, чтобы добавить сервисы в организацию.
Как часть требования, пользователь должен иметь возможность передавать сервисы в качестве аргумента. Команда создания сервиса в CF принимает 3 аргумента: имя сервиса, план, произвольное имя.
Аргумент передается в виде -a "имя_службы имя_пользователя, имя_первой службы_сервис_планирование_последующее имя_
Я думал, что для того, чтобы выполнить двойной анализ, мне нужно сделать это следующим образом
-a "servicename; имя плана; пользовательское имя, nextservice; nextplan; nextname"
затем мы вызываем команду для ее добавления cf create-service servicename имя_пользователя имя_пользователя
или если в имени есть пробелы
cf create-service "servicename" "planname" "customname"
Итак, с учетом сказанного, мой скрипт работает нормально, и вы можете предоставлять столько услуг, сколько хотите, разделив запятую. Но у меня проблема в том, что в нашей организации есть одна служба, в имени которой есть пробел, а в названии плана - пробел.
Итак, я пытался выяснить, как построить мою функцию для анализа строки для построения команды. У меня такое чувство, что мне нужно 2 различных цикла for, один из которых будет анализировать всю строку перед запятой, а затем второй цикл for для создания команды, и если в аргументах найдены пробелы, чтобы обернуть их в кавычки.
Так вот, что я имею до сих пор
add_service() {
if [ -n "${ADDSERVICEID}" ]
then
if [ "${ADDSERVICEID}" == "default" ]
then
....Our Default services are here
echo "The following services are now enabled in your organization"
cf services
else
IFS=","
for i in "${ADDSERVICEID[@]}"; do
if [[ $i =~ \ ]]; then
$i=\"$i\"
fi
for i in "${FULLSERVICE[@]}"; do
$i
echo "The following services are now enabled in your organization"
cf services
done
done
fi
fi
}
В основном я работаю над секцией else как моей секцией по умолчанию, так как все они статичны и работают нормально. Я уверен, что, вероятно, передумаю об этом, и ответ, вероятно, смотрит мне прямо в лицо, но у меня просто проблема, оборачивающая это вокруг меня. Кроме того, изменение названий услуг или планов, чтобы не было пробелов, для нас не вариант.
Спасибо всем за вашу помощь, и я надеюсь, что, как только у нас будет ответ на этот вопрос, он поможет другим в будущем.
ОБНОВЛЕНИЕ: Хорошо, теперь это вроде как работает. Я могу добавить свои услуги с пробелами в их именах. Отлично.
Теперь, однако, если я добавлю несколько служб для добавления, он просто объединит все вместе в одном операторе вместо синтаксического анализа,
Вот обновленный код
else
IFS=","
for arg1 in "${ADDSERVICEID[@]}"; do
IFS=";"
CREATESERVICE=""
for arg2 in "${arg1[@]}"; do
if [[ $arg2 =~ \ ]]
then
$arg2=\'\"$arg2\"\'
fi
CREATESERVICE+="${arg2}"
echo ${CREATESERVICE}
cf create-service ${CREATESERVICE}
echo "The following services are now enabled in your organization"
cf services
done
done
fi
Я вставил только от остальных
ОБНОВЛЕНИЕ: Да, ты должен удалить некоторые цитаты, не удивительно, что он собирал все это как одну строку. Вздох Я думаю, что пора спать
else
IFS=,
for arg1 in ${ADDSERVICEID[@]}; do
IFS=";"
CREATESERVICE=""
for arg2 in "${arg1[@]}"; do
if [[ $arg2 =~ \ ]]
then
$arg2=\'\"$arg2\"\'
fi
CREATESERVICE+=${arg2}
echo ${CREATESERVICE}
cf create-service ${CREATESERVICE}
done
done
echo "The following services are now enabled in your organization"
cf services
fi
Теперь все работает как надо, он принимает аргументы, если в них есть пробелы, мы заключаем аргумент в кавычки, анализируем его на, и; так что теперь он работает как чемпион.