2つのリストでdigを実行する

2つのリストでdigを実行する

ドメインとこれらのドメイン エイリアスを調査する必要があるため、結果は次のようになります:
ドメイン (+ エイリアスがない) がネーム サーバーを使用している場合 -> 出力
ドメインとエイリアスの両方がネーム サーバーを使用している場合 -> 出力
その他すべて いいえ (ドメインがネーム サーバーを使用していて、エイリアスが使用していない場合も含む)。ドメインは MySQL に保存されており、現在作業中のスクリプトがあります:

for domain in `echo "$QUERY1" | mysql -N -s -u $USER -p$PASS $DBNAME -h$HOST | awk '{print $1}'; do
    lookup=$(dig $domain ns +short)
    if [[ "$lookup" =~ 'XXX' ]]; then
        our=1
        break
    else
        our=0
        break
    fi
done

このクエリでは、すべて (ドメインとエイリアスの両方) をリストしています。もちろん、エイリアスのみ、またはドメインのみをリストする別のクエリを作成することもできます。ドメインのすべてのエイリアスをグループ化し、ドメイン名 + エイリアスのリストをループする必要があるようです。どちらかが NS を使用していない場合は、ドメインを印刷するように指示する変数を設定する必要があります。あなたのアイデアを教えてください。可能であれば、解決策を共有してください。

答え1

作業中のスクリプトの次の代替案を検討してください。

mysql --silent --skip-column-names \
    --user="$USER" --password="$PASSWORD" \
    --host="$HOST" --database="$DBNAME" \
    --execute="$QUERY1" |
awk '{ printf("%s ns +short\n", $1) }' |
if dig -f - | grep -q "XXX"; then
    our=1
else
    our=0
fi

スクリプトでは、自己文書化されるため、長いオプションを使用することを好みます。

のクエリは、が不要になる$QUERY1ように作成できます。awk

SELECT CONCAT(column, " ns +short") FROM ...

digパイプからの標準入力からクエリを読み取り、awk出力でのgrep検索に役立てるようにしました。XXX

面倒なループは必要ありません。

明らかに、これは最終的にやりたいことを実行するわけではなく、現時点で実行することだけを実行しますが、DNS ルックアップについてはあまり詳しくないので、このままにしておきます。

関連情報