2017-12-14 14 views
1

次のレコードが2つの配列で存在するかどうかをチェックしたいと思います。上記のコードが実行されると2つの配列を使用してDNSレコードがBashに存在するかどうかを確認するにはどうすればよいですか?

Domain_checking() { 
    array=(
     grafana 
     kibana 
     prometheus 
     alertmanager 
    ) 

    array2=(
     Name 
     NXDOMIAN 
    ) 


    for index in ${!array[*]}; do 
     echo "checking that ${array[$index]} exists in the domain domain.co.uk" 
     DOMAIN_CHECK=$(nslookup ${array[$index]}.domain.co.uk | grep {array2[$index]}) 
     if [[ $DOMAIN_CHECK == *'Name'* ]]; then 
      echo "The A record for ${array[$index]}.domain.co.uk exists" 
     elif [[ $DOMAIN_CHECK == *'NXDOMIAN'* ]]; then 
      echo "The A record for ${array[$index]}.domain.co.uk dose not exist" 
     fi 
    done 
} 

Domain_checking 

、ループがスタートを行います。私は、これはそれについて行くの最良の方法ですが、それは以下のコードから可能かもしれないようにロジックからそれが見えるかどうかわからないんだけど私はechoステートメントに{array2[$index]}を追加したときとecho文に対して、私は両方の配列内の値を参照してください。

しかし、配列の値は、私はループの反復がそうであるように、これはある理由としてわからないんだけどこれ、DOMAIN_CHECKには存在しません。

だから、私はDOMAIN_CHECKがある種の値を持ち、ifステートメントをヒットするはずですが、何らかの理由でこれは当てはまりません。何故ですか?

+2

あなたが参照しているどの変数で「変数」のすべてのインスタンスを置き換えることはできますか? –

+0

OK変数がDOMAIN_CHECKの質問を更新しました – user3700919

+1

'| grep {array2 [$ index]} '?いずれにしても、構文エラーがあります。 grep $ {array2 [$ index]} ' – arco444

答えて

2

あなたが唯一のドメインが存在するかどうかを確認するためにnslookupを使用して、というよりも、コマンドから特定の情報を探している表示されます。あなただけの終了コードをチェックする代わりに、grepのを使用して簡素化することができます:

Domain_checking() { 
    array=(
     grafana 
     kibana 
     prometheus 
     alertmanager 
    ) 

    for domain in ${array[@]} 
    do 
     if nslookup "${domain}.domain.co.uk" >/dev/null 2>&1 ; then 
     echo "$domain exists" 
     else 
     echo "$domain does not exist" 
     fi 
    done 
} 

Domain_checking 

ドメインレコードが存在する場合、nslookup0を返し、if条件が満たされます。それ以外は失敗を示し、制御はelseに送られます。

+0

ありがとうございます – user3700919

2

両方の配列のインデックスとして$indexを使用しますが、最初のエントリの一致するエントリは$array2です。だからこそ、他のエントリーは表示されず、なぜgrepには必須の引数がないのですか?あなたのロジックを通して考える

、私はgrepのためNameに完全に二番目の配列とハードコードを削除していない何らかの理由が表示されません。

は、最初の配列は、いずれかの多くを支援していない、それを考える来ます。配列のインデックスではなく、名前自体を繰り返し処理することでコードを単純化することができます。

domain=some.thing 
names="kibana prometheus graphite" 
for name in $names; do 
    nslookup $name.$domain .... 
done 
+0

こんにちは、私を助けてくれてありがとう、あなたはコードを簡素化の観点から適切である、私は第二の配列は、以前の第一、その後終了するので、私はループにそれが正しく動作するためには理想的な未満である第二の配列を持っていると思います – user3700919

関連する問題