我正在尝试为Nagios制作一个脚本,使用Sendgrid API发送邮件。
当我的身体/主体没有任何空间时,它可以正常工作。但是当我拥有它时,我得到了这个错误:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 144 100 63 100 81 140 181 --:--:-- --:--:-- --:--:-- 181
curl: (3) [globbing] unmatched close brace/bracket in column 6
{"errors":[{"message":"Bad Request","field":null,"help":null}]}
这是我的剧本。
#!/bin/bash
sendgridapikey="................................................."
mailto="mymail@mail.com"
mailfrom="sendermail@mail.com"
subject="subject here"
body="DefaultNagiosMailBody\n\nTest"
while getopts a:t:f:s:b: option
do
case "${option}"
in
a) sendgridapikey=${OPTARG};;
t) mailto=${OPTARG};;
f) mailfrom=${OPTARG};;
s) subject=${OPTARG};;
b) body=${OPTARG};;
esac
done
curl -X POST "https://api.sendgrid.com/v3/mail/send" -H "Authorization: Bearer $sendgridapikey" -H "Content-Type: application/json" -d \
'{"personalizations":[{"to":[{"email":"'$mailto'"}],"subject":"'$subject'"}],"from":{"email":"'$mailfrom'","name": "Nagios"},"content":[{"type":"text/plain","value":"'$body'"}]}'
答案 0 :(得分:3)
您没有正确引用变量。写得像这样:
'{"personalizations":[{"to":[{"email":"'"$mailto"'"}],"subject":"'"$subject"'"}],"from":{"email":"'"$mailfrom"'","name": "Nagios"},"content":[{"type":"text/plain","value":"'"$body"'"}]}'
请注意,我将所有变量包装在双引号中。 你写它的方式, 它们根本没有用引号括起来。
要在简化示例中显示,您的代码看起来基本上是这样的:
curl -d 'quoted string '$var' and some more'
似乎引用了$var
,但事实并非如此。
左侧的单引号关闭在quoted
之前开始的单引号文本。右侧的单引号开始一个新的单引号文本,以more
结尾。 $var
本身未引用此处。
这就是它的引用方式:
curl -d 'quoted string '"$var"' and some more'
我在顶部的建议中应用了相同的逻辑。