if elseに変数IPアドレスを渡す

if elseに変数IPアドレスを渡す

私は次のコマンドを持っています:

ptr=`host $hostname`

結果は次のとおりです。

test.tester.test has address 192.168.1.1

動作します!

今私が望むのは、IPアドレス(192.168.1.1)だけを抽出して$ myptr変数に渡し、次のコマンドを実行することです。

if $myptr | sed -n '/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)/p' ; then
   host $myptr
else
   echo "No PTR Record found"
fi

しかし、これはうまくいきません。助けてください?

答え1

の出力に対して追加のテキスト処理を実行する必要はなく、IPアドレスのみを取得するためにhost使用できますdig +short(そして必要なIPリバースルックアップを実行します)。

dig +short "$hostname"

例えば

ip="$(dig +short "$hostname")"
host "$ip"

または直接:

host "$(dig +short "$hostname")"

答え2

IPを抽出するには、次のように呼び出すことができます。

ptr=`host $hostname | awk '/has address/ {print $NF}'`
  • /住所あり/その文字列をホストとして使用するmach行は、より多くを返すことができます。たとえば、Googleを試してみてください。
  • 印刷$NF- NFはフィールド数を返すawkの変数なので、$ NFは最後のフィールドを指します。

その後、grepを使用して戻りコードを確認できます(sedは正規表現を見つけても見つからない場合でも0を返します。これは次のように機能します)。

echo $ptr | egrep "your pattern"
if [ $? -eq 0 ]; then
    echo "This Works"
fi

しかし、簡単に確認できます$ptr出力が含まれています。ホストコマンドで何も見つからない場合$ptr空なので、次のようになります。

if [ -n $ptr ]; then
    echo "Works"
else 
    echo "Not found :("
fi

見て人々のテスト:

-n STRING
          the length of STRING is nonzero
-z STRING
          the length of STRING is zero

関連情報