Bash脚本 - 检查具有大括号的字符串

时间:2016-08-04 16:27:56

标签: bash

我有一个脚本的以下部分,它通过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" }' ]],单引号如上所示,也没有引号。好像什么都没有用。

3 个答案:

答案 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"* ]]

这很有用。