使用curl和文件中的变量PUT数据



我有一个类似的bash脚本

#!/bin/bash
while read fqdn hostname; do
curl -H "Content-Type:application/json" -XPUT "https://server/api/hosts/${fqdn}" -d '{"host":{"name": "'${hostname}'"}}' --cacert bundle.pem --cert pnet-pem.cer --key privkey.pem
done <curl1.txt

的curl1.txt文件

fqdn(选项卡)主机名

我必须使用福曼API更新一些数据。我有很多fqdn和主机名,所以我写了上面的脚本。问题出在JSON上,因为我得到了这样一个错误:

{"status":400,"error":"There was a problem in the JSON you submitted: 795: unexpected token at '{"host":{"name": "ptesrv02-lubr"}}'"}

当我放'{"host":{"name": "${hostname}"}}'而不是'{"host":{"name": "'${hostname}'"}}'时,我得到

{
  "error": {"id":130,"errors":{"interfaces.name":["is invalid"],"name":["is invalid"]},"full_messages":["Name is invalid","Name is invalid"]}
}

那么问题出在哪里呢?你能帮我吗?

要从从Windows复制的文件中删除琐碎的特殊字符(以CR-LF结尾),"tr"命令可以用作

hostname=$(echo $hostname|tr -d 'r')

在上面的例子中。这些特殊字符的出现破坏了bash对待字符的方式。

感谢threadp指出了hostname变量中存在的特殊字符。

如果您怀疑文件有这样的CR-LF结尾,您可以通过使用grep搜索它们来确认,将文件视为二进制

grep -U $'15' curl1.txt

作为线程指针,您有一个尾随的r字符。你可以尝试删除它。

${hostname%?}

这个用法只删除了最后一个字符,在这个场景中,它是r的尾部。但是,最好使用

${hostname/$'r'/}

感谢123

相关内容

  • 没有找到相关文章

最新更新