以下に、ファイル内のドメインリストをカールして結果を出力するように設計されたbashスクリプトを示します。
#!/bin/bash
baseurl=https://csp.infoblox.com
domains=/home/user/Documents/domainlist
B1Dossier=/tide/api/data/threats/state/host?host=$domains
APIKey=<REDACTED>
AUTH="Authorization: Token $APIKey"
for domain in $domains; do curl -H "$AUTH" -X GET ${baseurl}${B1Dossier} > /tmp/outputfile; done
残念ながら、スクリプトはファイル内のすべてのドメインを繰り返すわけではありません。
理解を助けるために、スクリプトの期待/解釈をリストしました。
- ファイルには
/home/user/Documents/domainlist
いくつかのフィールドがあります。 $domains
APIを使用して最後に変数を追加して、ファイル内の各ドメインを確認してみました。B1Dossier
- ファイル内の各ドメインに対して指定されたカールコマンドを実行し、結果を印刷することが期待されます。
可視性を高めるために、以下の単一ドメインに対して機能するカールコマンドを含めました。
curl -H 'Authorization: Token <REDACTED>' -X GET https://csp.infoblox.com/tide/api/data/threats/state/host?host=<place domain here>
誰が私が間違っているのか、この問題を解決する方法を見つけるのに役立ちますか?
ベストアンサー1
ファイルのフィールドを配列として読み取って繰り返すことができます。
baseurl="https://csp.infoblox.com"
B1Dossier="/tide/api/data/threats/state/host?host="
url="${baseurl}${B1Dossier}"
# read domains to an array
mapfile -t domains < /home/user/Documents/domainlist
# loop for domains
for d in "${domains[@]}"; do
curl -H "$AUTH" -X GET "${url}${d}" >> temp
done
メモ:
コマンドで into ループを使用しても効果はありません。ドメインがinに含まれていてforループがあるB1Dossier
ため、ある種の再帰評価を待っているようです。ただし、URLはこのようにループ内で変更されません。B1Dossier
domain
また、次のコマンドを使用してターゲットファイルに応答を追加する必要があります>>
。それ以外の場合は、次の応答が前の応答を上書きします。