我有一个脚本的以下部分,它通过curl命令添加租户,然后检查响应。
回复是{ "tenant": "provisioned" }
这是我的剧本:
printf "\n** ADDING A TENANT **\n"
TenantResponse=`curl -X POST -H 'Content-Type: application/json' -H 'serviceSharedSecret: sharedsecret' -d '{
"settings": {},
"longName": "QA Test Server",
"tenant_id": "2",
"long_name": "QA Test Server",
"mwa": "string",
"env_overrides": {},
"rough_sizing": "string"
}' "http://${IP_ADDRESS}:8080/rest/1.0/dg/tenants"`
if [[ $TenantResponse == '{ "tenant": "provisioned" }' ]]
then
echo "Tenant 2 was added"
echo '<testcase classname="TenantProvisioning" name="Provision_Tenant_2"/>' >> isoValidationReport.xml
else
echo "There is a problem provisioning tenant: $TenantResponse"
echo '<testcase classname="TenantProvisioning" name="Provision_Tenant_2">' >> isoValidationReport.xml
echo '<failure message="There is a problem provisioning tenant" type="failure"/>' >> isoValidationReport.xml
echo '</testcase>' >> isoValidationReport.xml
error_count=$((error_count + 1))
fi
我在花括号周围用双引号尝试了我的[[ $TenantResponse == '{ "tenant": "provisioned" }' ]]
,单引号如上所示,也没有引号。好像什么都没有用。
答案 0 :(得分:4)
正如评论所示,这很可能是由于回车或可能是尾随空间。这种做法多么脆弱。
带花括号的字符串实际上是JSON,应该这样对待:
if [[ $(jq '.tenant == "provisioned"' <<< "$TenantResponse") == "true" ]]
then
echo "the 'tenant' field has the value 'provisioned'"
else
echo "it doesn't"
fi
这样可以强化格式化并将来证明它不会发生变化:
{ "tenant": "provisioned" }
{"tenant":"provisioned"}
{"tenant":"provisioned", "year": "2016"}
{"tenant":"unavailable", "previous": "provisioned"}
答案 1 :(得分:0)
尝试通过curl
传递tr -dc '[:print:]'
输出。这将删除所有不可打印的字符,包括\r
。这也将删除\n
,但您可能不关心这一点。
答案 2 :(得分:0)
我更改了我的if语句,以便在响应中查找单词provisioned
。像这样if [[ $TenantResponse == *"provisioned"* ]]
这很有用。