![](/img/trans.png)
[英]bash script looks right but giving "Unexpected end of JSON" / "curl error (3): unmatched close brace" when input is more than one word
[英]cURL: unmatched brace in URL position when using bash script
我正在尝试编写一个脚本,以便使用 REST API 轻松写入 firebase 数据库。 这是导致问题的脚本部分:
#!/bin/bash
echo "patient username:"
read USER
echo "name:"
read NAME
echo "birthday:"
read BDAY
echo "insurance provider:"
read INSPROV
echo "insurance number:"
read INSNUMB
echo "group number:"
read GRPNUMB
form0="'"
form10='{\n "'
form1=${form0}${form10}
form2='": {\n "'
form3='name": "'
form4='",\n "birthday": "'
form5='",\n "insurance provider": "'
form6='",\n "insurance number": "'
form7='",\n "group number": "'
form8='"\n }\n}'
form9="' "
link="'https://billify-51384-default-rtdb.firebaseio.com/userinfo.json'"
#adding strings together
send1=${form1}${USER}
send2=${form2}${form3}
send3=${send2}${NAME}
send4=${send3}${form4}
send5=${send4}${BDAY}
send6=${send5}${form5}
send7=${send6}${INSPROV}
send8=${send7}${form6}
send9=${send8}${INSNUMB}
send10=${send9}${form7}
send11=${send10}${GRPNUMB}
send12=${send11}${form8}
send13=${send1}${send12}
send14=${send13}${form9}
URL=${send14}${link}
printf "$URL" >> tempfile.txt
URLFX=$(<tempfile.txt)
echo
echo "PRINTING DATA---------------------------------"
printf "$URLFX"
echo
curl -X PUT -d $URLFX
rm tempfile.txt
对不起所有的字符串组合,bash 在提高效率方面很糟糕。 我将 JSON 数据放入一个文本文件中,然后让脚本读取它以修复换行问题(似乎是这样):当我运行脚本时,我得到这个输出:
PRINTING DATA---------------------------------
'{
"testuser": {
"name": "Johnny Smith",
"birthday": "January 3, 1903",
"insurance provider": "CompanyName",
"insurance number": "101010",
"group number": "1010"
}
}' 'https://billify-51384-default-rtdb.firebaseio.com/userinfo.json'
curl: (3) URL using bad/illegal format or missing URL
curl: (3) unmatched brace in URL position 1:
{
^
它似乎正在正确格式化所有内容,因为当我手动将打印数据添加到 cURL 命令时,它可以正常工作并添加数据。 cURL 的脚本有什么问题? 谢谢!
如果您已经将字符串存储到文件tempfile.txt
,为什么不上传文件本身。
此外,您还应该设置适当的标题。
curl -X "POST" "$URL" --data @tempfile.txt -H "Accept: application/json" -H "Content-Type: application/json" -H "User-Agent: MyScript/0.1"
直接的问题是缺少在$URLFX
周围的引号(这很有趣,当您打印它时看到它正确地引用它)以及在 JSON 字符串周围添加单引号,您可能会误以为是修复引用问题。
代码中值周围的句法引号和这些值中的文字引号之间存在差异。 只有前者会影响 shell 解析值的方式。 观察echo '
(语法错误)和echo "'"
(由一个单引号组成的字符串,在语法双引号中以保护字符串不被解释为语法)之间的区别。
有了这个,试试这个重构。
#!/bin/bash
read -r -p "patient username: " User
read -r -p "name: " Name
read -r -p "birthday: " Bday
read -r -p "insurance provider: " Insprov
read -r -p "insurance number: " Insnumb
read -r -p "group number: " Grpnumb
curl -X PUT -d "\
{
\"$User\":
{
\"name\": \"$Name\",
\"birthday\": \"$Bday\",
\"insurance provider\": \"$Insprov\",
\"insurance number\": \"$Insnumb\",
\"group number\": \"$Grpnumb\"
}
}" 'https://billify-51384-default-rtdb.firebaseio.com/userinfo.json'
不习惯像这样通过多行拆分您发送到 URL 的 JSON,但 Bash 可以很好地应对。 在语法双引号内,我们需要对任何文字双引号进行反斜杠转义以保留它们,这有点不吸引人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.