簡體   English   中英

JSON和Shell腳本錯誤

[英]Error with JSON and Shell Script

我試圖用shell腳本發出松弛通知。

JSON參數由變量構成,這些變量由MySql查詢獲得。

#!/bin/sh
#MySQL RO Access
host='mysqlserver.com'
userdb='slackro'
password='password'
db='db'
#Slack information
hook='https://hook.slack'
user='slackusr'
channel='o_channel'
emoji='slackusr'

#Query
id=`mysql -D $db -u $userdb -p$password -e 'SELECT id FROM ticket WHERE tn ='$1'' -h $host | sed -e '1d'`
tn=`mysql -D $db -u $userdb -p$password -e 'SELECT tn FROM ticket WHERE tn ='$1'' -h $host | sed -e '1d'`
title=`mysql -D $db -u $userdb -p$password -e 'SELECT title FROM ticket WHERE tn ='$1'' -h $host | sed -e '1d' | sed "s/'/ /g" | sed "s/°//g" | sed "s/ /_/g" `
customer=`mysql -D $db -u $userdb -p$password -e 'SELECT customer_id FROM ticket WHERE tn ='$1'' -h $host | sed -e '1d'`
msj=`mysql -D $db -u $userdb -p$password -e 'SELECT a_body FROM article WHERE ticket_id ='$id' ORDER BY id DESC LIMIT 1' -h $host | sed -e '1d'`
url='http://iiabox.infra.ultra.sur.top/otrs/index.pl?Action=AgentTicketZoom;TicketID'$1

#Message
curl -X POST -H 'Content-type: application/json' --data '{"username": "slackusr","icon_emoji": ":slackusr:","attachments": [{"fallback": "New Ticket","pretext": "New ticket from '$customer'","title": "'$title'","title_link": "'$url'","text": "'$msj'","color": "#006495"}]}' $hook

當我執行此腳本時,我會得到類似的東西

curl -X POST -H'內容類型:application / json'--data'{“用戶名”:“ OTRS”,“ icon_emoji”:“:slackusr:”,“附件”:[{“ fallback”:“新票證”,“前綴”:“來自my@email.com的新票證”,“標題”: “ Prueba'deNotificación'6” ,“ title_link”:“ http://site/otrs/index.pl?Action = AgentTicketZoom; TicketID2016110472000067 “,” text“:” Cerrado“,” color“:”#006495“}]}' https://hooks.slack.com/ curl:(6)無法解析主機:de curl:(6 )無法解析主機:xn--notificacin-zeb curl:(3)第152列中的[globbing]不匹配的緊括號/括號

我不明白為什么變量$ title的結果顯示“ Prueba'deNotificación'6”

如果我用echo打印$ title變量, 則會得到: “ Prueba deNotificación6 ”在第一個空格之前和最后一個空格之后沒有簡單的引號。

我能做什么?

第一:整體而言,此代碼無法修復。 不要在生產中使用它。 用您實際上最擅長的語言(具有支持綁定變量的SQL庫,以便您可以修復安全性錯誤,以及可以確保始終正確引用內容的JSON庫)重寫該語言,而不是shell。


話雖如此,至於您眼前的問題-

每當您在單引號中執行此操作時:

"title": "'$title'",

...您正在擴展$customer unquoted ,這意味着擴展值內的空格將用於shell的單詞拆分和glob擴展。

相反,使其:

"title": "'"$title"'"

...在終止單引號上下文之后打開雙引號上下文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM