質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

1660閲覧

シェルスクリプトcurl -d内のループ処理

kareina

総合スコア11

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1グッド

1クリップ

投稿2020/01/22 05:25

編集2020/01/23 02:53

前提・実現したいこと

Zabbix APIでシェルスクリプトでマップ及び要素の追加をしようと考えております。
hostID_listの中にhostIDを羅列していて
それを${HostID}に入れてループさせたいです。

該当のソースコード

#!/bin/bash ZabbixWeb=http://xxx.xxx.xxx.xxx/zabbix/ auth=`bash zabbix_token_get.sh` PRE_IFS=$IFS IFS=$'\n' curl -s -d ' { "jsonrpc": "2.0", "method": "map.create", "params": { "name": "HostHostMap", "width": 1400, "height": 1100, "iconmapid": 1, "label_type": 0, "label_location": 0, "highlight": 0, "selements": [ ---------------------ここから--------------------- { "elements": [ {"hostid": "'${HostID}'"} ], "elementtype": 0, "iconid_off": "2" } ---------------------ここまで--------------------- ] }, "auth": "'${auth}'", "id": 1 } ' -H "Content-Type: application/json-rpc" ${ZabbixWeb}api_jsonrpc.php echo ""

試したこと

上記のここから~ここまでの部分をループ処理すれば要素が複数作成できるのですが
下記のようにfor文を使ってもエラーとなります。

for line in $(cat /root/hostID_list) do HostID=’echo ${line}’ { "elements": [ {"hostid": "'${HostID}'"} ], "elementtype": 0, "iconid_off": "2" } done
DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/01/22 05:43

PHP直接関係ないのでは
kareina

2020/01/23 02:54

タグを外しました!ありがとうございます。
guest

回答1

0

curlの標準入力を使ってみました

bash

1#!/bin/bash 2ZabbixWeb=http://xxx.xxx.xxx.xxx/zabbix/ 3 4auth=$(bash zabbix_token_get.sh) 5 6curl -s -d @- -H "Content-Type: application/json-rpc" ${ZabbixWeb}api_jsonrpc.php <<_EOF_ 7{ 8 "jsonrpc": "2.0", 9 "method": "map.create", 10 "params": { 11 "name": "HostHostMap", 12 "width": 1400, 13 "height": 1100, 14 "iconmapid": 1, 15"label_type": 0, 16"label_location": 0, 17 "highlight": 0, 18 "selements": [ 19$( 20 cn=1 21 for line in $(cat /root/hostID_list) 22 do 23 HostID=${line} 24 if [ $cn -ne 1 ]; then echo -n ","; fi 25 echo -n "{ " 26 echo -n "\"elements\": [ " 27 echo -n "{\"hostid\": \"${HostID}\"} " 28 echo -n " ], " 29 echo -n "\"elementtype\": 0, " 30 echo -n "\"iconid_off\": \"2\" " 31 echo "}" 32 (( cn++ )) 33 done 34) 35 ] 36 }, 37 "auth": "${auth}", 38 "id": 1 39} 40_EOF_

投稿2020/01/22 06:16

編集2020/01/30 08:18
amura

総合スコア333

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kareina

2020/01/23 02:49

ご回答ありがとうございます。 やってみたところ、無事にhostidの置換はできましたが機能しませんでした、、 ---------------------デバッグ--------------------- + ZabbixWeb=http://xxx.xxx.xxx.xxx/zabbix/ ++ bash zabbix_token_get.sh + auth=xxxxxxxxx + curl -s -d @- -H 'Content-Type: application/json-rpc' http://xxx.xxx.xxx.xxx/zabbix/api_jsonrpc.php +++ cat /root/hostID_list ++ for line in '$(cat /root/hostID_list)' ++ HostID=10874 ++ echo -n '{ ' ++ echo -n '"elements": [ ' ++ echo -n '"hostid": "'\''10874'\''"} ' ++ echo -n ' ], ' ++ echo -n '"elementtype": 0, ' ++ echo -n '"iconid_off": "2" ' ++ echo '}' ++ for line in '$(cat /root/hostID_list)' ++ HostID=10896 ++ echo -n '{ ' ++ echo -n '"elements": [ ' ++ echo -n '"hostid": "'\''10896'\''"} ' ++ echo -n ' ], ' ++ echo -n '"elementtype": 0, ' ++ echo -n '"iconid_off": "2" ' ++ echo '}' {"jsonrpc":"2.0","error":{"code":-32700,"message":"Parse error","data":"Invalid JSON. An error occurred on the server while parsing the JSON text."},"id":null}
amura

2020/01/23 04:46

jsonのデータ部分が間違えていたので修正しました。自nodeサーバへの送信は確認できました。
kareina

2020/01/30 07:22

ご丁寧にありがとうございます。 とてもいけそうなのですがこんなエラーでした。 {"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"Invalid parameter \"/sessionid\": value is too long."},"id":1} ---------------------デバッグ--------------------- + ZabbixWeb=http://xxx.xxx.xxx.xxx/zabbix/ ++ bash zabbix_token_get.sh + auth=xxxxxxxxx + curl -s -d @- -H 'Content-Type: application/json-rpc' http://xxx.xxx.xxx.xxx/zabbix/api_jsonrpc.php ++ cn=1 +++ cat /root/host_create/hostID_list ++ for line in '$(cat /root/hostID_list)' ++ HostID=10874 ++ '[' 1 -ne 1 ']' ++ echo -n '{ ' ++ echo -n '"elements": [ ' ++ echo -n '{"hostid": "'\''10874'\''"} ' ++ echo -n ' ], ' ++ echo -n '"elementtype": 0, ' ++ echo -n '"iconid_off": "2" ' ++ echo '}' ++ (( cn++ )) ++ for line in '$(cat /root/host_create/hostID_list)' ++ HostID=10896 ++ '[' 2 -ne 1 ']' ++ echo -n , ++ echo -n '{ ' ++ echo -n '"elements": [ ' ++ echo -n '{"hostid": "'\''10896'\''"} ' ++ echo -n ' ], ' ++ echo -n '"elementtype": 0, ' ++ echo -n '"iconid_off": "2" ' ++ echo '}' ++ (( cn++ )) {"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"Invalid parameter \"/sessionid\": value is too long."},"id":1}
amura

2020/01/30 08:39 編集

JOSNフォーマットにエラーの様です。関係ないかもしれませんがhostIDのクオートを取ってみました。 authもクオート不要ですかね
amura

2020/01/30 08:46

-32602 はZabbix APIのエラーかもしれません。JSONフォーマットに問題が有りそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問