シェルスクリプトを使用してスラック通知を作成しようとしました。JSONとシェルスクリプトのエラー
JSONパラメータは、MySqlクエリで取得される変数によって形成されます。 --data「{ "ユーザー名": "OTRS"、」:私はこのスクリプトを実行すると、私はその
カール-X POST -H 'アプリケーション/ JSONコンテンツタイプ' のような何かを得る
#!/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
":":slackusr: "、"添付ファイル ":[{"フォールバック ":"新しいチケット "、"口実 ":"新しいチケット[email protected] "、"タイトル ":" Prueba 'NotNotificación' 6"、 "title_link": "http://site/otrs/index.pl?Action=AgentTicketZoom;TicketID2016110472000067"、 "テキスト": "セラード"、 "色": "#006495"}]}」https://hooks.slack.com/ カール:デ カール:(6(6)ホストを解決できませんでした。 )ホストを解決できませんでした:xn - notificacin-zeb curl:( 3)I印刷$場合は変数$タイトルの結果は、その「Prueba 'デNotificación' 6"
を示し、なぜ私は理解していない列152
で比類のない近いブレース/ブラケットを[グロブ]エコーを伴うタイトル変数私は"Prueba deNotificación6"を取得します。最初のスペースの前と最後のスペースの後には簡単な引用符はありません。
どうすればよいですか?
このコードには深刻なセキュリティに影響を与えるバグがあります。誰かがチケット番号「1」または「1」==「1」またはチケット番号「 '」を付けるとどうなると思いますか? DROP TABLEチケット。 - '? –
JSONを安全に作成するには、文字列の連結(正しい引用の責任を負う)ではなく、構文を理解する 'jq 'などのツールを使用します。 –
...シェル側の他のバグについては、http://shellcheck.net/を参照してください。 –