我正在尝试使用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="DefaultNagiosMailBodynnTest"
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'"}]}'
您没有正确引用变量。这样写:
'{"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'
我在顶部的建议中应用了相同的逻辑。