bash脚本使用curl将变量添加到变量中

时间:2014-08-14 15:40:47

标签: bash curl

我有一个简单的bash脚本,它使用api将自己添加到数据库中。但剧本不断添加' '我的变量和破碎的卷曲。

hostname=`hostname`
ip_address=`ip add show eth0 | grep 'inet ' | awk '{ print $2 }' | cut -d '/' -f1`
env=`hostname | cut -d '-' -f1`
os=`cat /etc/issue.net | head -1`
date=`date`
curl -H 'Content-Type: application/json' -PUT "https://10.10.10.10/database" -k -d '{"Environment":"'$env'","Hostname":"'$hostname'","IP_Address":"'$ip_address'","OS":"'$os'","State":"OK","Updated_Time":"'$date'"}'
exit $?

输出是这样的:

curl -H 'Content-Type: application/json' -PUT https://10.10.10.10/database -k -d '{"Environment":"ops","Hostname":"ex-example-host","IP_Address":"10.10.10.10","OS":"Ubuntu' 14.04 'LTS","State":"OK","Updated_Time":"Thu' Aug 14 15:27:55 PDT '2014"}'

$date$hostname都放置了' '在里面打破卷曲的格式。有办法解决这个问题吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

问题是你要在bash中不加引号扩展参数扩展,因此这些值中​​的空格会分隔传递给curl的单词。如果JSON允许您使用单引号,那么交换使用双引号和单引号会更简单。不是这样,我会先使用read将JSON存储在变量中,然后再使用here文档来简化引用。

read -r data <<EOF
{"Environment":"$env","Hostname":"$hostname","IP_Address":"$ip_address","OS":"$os","State":"OK","Updated_Time":"$date"}
EOF

curl ... -d "$data"