
私は次のコマンドを持っています:
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