好的我有一个脚本我用bash写云代工厂为组织添加服务。
作为要求的一部分,用户需要能够将服务作为参数传递。 CF中的create service命令需要3个参数:service name,plan,custom-name。
arg的传递类似于-a" servicename planname customname,nextservice nextplan nextname"
我在想,为了对此进行双重解析,我必须像这样做
-a" servicename; planname; customname,nextservice; nextplan; nextname"
然后我们调用命令将其添加到cf-service servicename planname customname
或如果名称中有空格
cf create-service" servicename" " planname" " customname"
所以说,我说我的脚本运行得很好,你可以提供任意数量的服务,你可以用逗号分隔。但我遇到的问题是我的组织中有一个服务,在服务名称中有一个空格,在计划名称中有一个空格。
所以我一直试图弄清楚如何构建我的函数来解析字符串以构建命令。我有一种感觉,我需要2个不同的for循环,一个将解析整个字符串前逗号,然后是第二个for循环来构建命令,如果在args中找到任何空格将它们包装在引号中。
所以这就是我迄今为止的目标
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
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
这现在可以正常工作,它需要args,如果有空格我们将arg包装在引号中,我们解析它,并且;它现在就像一个冠军。
答案 0 :(得分:0)
这是函数的这一部分的最终版本,因为它正在做我想做的事情
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