1

さまざまなネーム サーバーを持つ多数のドメインを持つ Web サーバーがあり、混乱を解消しようとしています。ドメインとそのネーム サーバーのリストを取得しようとしています。この単純なスクリプトを作成しましたが、ほとんど機能します。

#!/bin/bash
for f in `cat mydomains.txt`
do
    echo $f " " >> mydns.txt
    dig ns $f | grep '^$f' | cut -d $'\t' -f 5 >> mydns.txt
    echo "" >> mydns.txt
done

現時点では、これが行うことはecho $f " " >> mydns.txt.

掘り出し線を取り、$fコマンドラインにあるはずのものを置き換えると、期待どおりの結果が得られます。ただし、スクリプトには何も表示されません。前の行$fでエコーされるため、変数が設定されていることがわかります。$fスクリプトで機能しないのはなぜですか?

4

3 に答える 3

2

一重引用符は、シェルが変数を展開するのを防ぎます。二重引用符を使用する必要があります。

dig ns "$f" | grep "^$f" | ...

呼び出し$fで二重引用符も使用したことに注意してください。dig変数を引用することは良い習慣です。詳細については、この他の SO の質問を参照してください。

于 2013-10-18T16:34:16.153 に答える
2

'^$f' を grep するつもりでしたか? これは '^'"$f" である必要があります。つまり、変数の周りに目盛りがありません。このままでは広がりません。

于 2013-10-18T15:08:32.790 に答える