ファイルのリストフィールドのカーリングは機能しません。

ファイルのリストフィールドのカーリングは機能しません。

以下に、ファイル内のドメインリストをカールして結果を出力するように設計された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いくつかのフィールドがあります。
  • $domainsAPIを使用して最後に変数を追加して、ファイル内の各ドメインを確認してみました。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はこのようにループ内で変更されません。B1Dossierdomain

また、次のコマンドを使用してターゲットファイルに応答を追加する必要があります>>。それ以外の場合は、次の応答が前の応答を上書きします。

おすすめ記事