私は複数の電話を持っており、電話の稼働時間を取得しようとしています。すべての電話でREST APIを有効にしており、稼働時間の値を取得するためにCURLスクリプトを実行したいと思います。 Polycomの携帯電話の価値を取得するスクリプトがあります。次のコマンドは機能しますが、3000以上のデバイスでこれを実行したいと思います。 100個のコマンドを含むスクリプトを実行すると、出力が出ますが、すべて混乱しています。 3000台のデバイスすべてに、同じユーザー名とパスワードを持つすべての電話機のIPアドレスを含むtxtファイルとExcelファイルがあります。すべてのコマンドを実行し、IPADDRESSを含むテキストファイルを取得し、要求の結果(IPADDRESS: "Status": "2000""など)を返す方法を探しています。主に簡単な方法が必要です。各IPアドレスの各カールラインの結果を表示します。
注文する
curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" -H "Content-Type: application/json" -k https://USERNAME:PASSWORD@IPADDRESS/api/v1/mgmt/config/get
出力
{“Status”: “2000”, “data”: {"UpTimeSinceLastReboot": "<DAYS_HOURS_MINUTES_SECONDS>"}
>> /tmp/filename.txtを追加して、すべての応答を含むtxtファイルを出力できましたが、それを電話のIPアドレスと正確に一致させることはできませんでした。
答え1
すべての例では、ファイルに1行に1つのIPがあるとします。
1.カールとマジック
次のことで目標を達成できます。curl(1)
そして周りの魔法
curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" \
-H "Content-Type: application/json" \
-k \
-u USERNAME:PASSWORD \
-w ",%{remote_ip}\t" \
<(sed 's#^#https://#;s#$#/api/v1/mgmt/config/get#' /path/to/file) \
| tr -ds '\n\t' '\t\n'
より良い理解のために、コマンドを複数行に分けました。
- 資格情報をURLからカールパラメータに移動しました。
- キーはサブシェルから入力され、IPの前にプロトコルが付けられます。https://そしてルートを追加してください/api/v1/mgmt/config/get
- -w オプションの書き込みリモートIP応答後。後で tr でその形式を使用して目的の
,REMOTE_IP<TAB>
形式を作成します。 - パイプを通ってください。
tr(1)
応答の終わりから可能な改行を削除し、最後に改行を作成します(それはうまくいきませんが、うまくいくはずです)。
注:この例の結果は次のとおりです。
RESPONSE,IP
…
2. for ループ
for ip in $(cat /path/to/file)
do
echo -ne "$ip\t"
curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" -H "Content-Type: application/json" -k https://USERNAME:PASSWORD@$ip/api/v1/mgmt/config/get
done
結果:
IP,RESPONSE
…
3. whileループ
whileループ
while read ip
do
echo -ne "$ip\t"
curl -d "{\"data\": [\"UpTimeSinceLastReboot\"]}" -H "Content-Type: application/json" -k https://USERNAME:PASSWORD@$ip/api/v1/mgmt/config/get
done < /path/to/file
結果:
IP,RESPONSE
…