发布到发送网格 API 时,Bash 脚本中的变量中不能有空格



我正在尝试使用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'

我在顶部的建议中应用了相同的逻辑。

最新更新