ここに私のスクリプトがあります。太い部分を完成できます。私のホスト名がAレコードかエイリアスかを確認してスクリプトを完成させようとしています。私は運が悪いので、誰かのアドバイスが必要です。 grepとawkを使ってみましたが、うまくいかないようです。
#!/bin/sh
#Query DB for cnames
#Pulling cnames
#Lets use sed to clean up and remove "" that regex miss.
#Added dos2unix to get rid of the hidden M from /tmp/final.csv
mssql -f csv -c ~/applications/mssql/mssql.json -q "SELECT * FROM Cname" | cut -f 3 -d "," | sed 's/["]//g' | sort | uniq | dos2unix >/tmp/final.csv
#Validating cnames from file /tmp/final.csv
while read -r host
do
echo $host | egrep "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$" >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "host $host 8.8.8.8"
else
echo "unable to resolve '$host'" >&2
fi
done < /tmp/final.csv
# removed weird stars from some of these lines -- thrig
#Verify whether it's an A record or an alias
LOOKUP=`host $host 8.8.8.8`
if [ $? -eq 0 ]
then
echo $LOOKUP | grep -f "alias" | awk '{print $2}'| grep -v '#' | awk '{print $2}'
else
echo "$LOOKUP is null"
fi
# what is this in relation to?? -- thrig
done
ベストアンサー1
DNSのエイリアスはCNAMEなので、これを確認するには、対応するレコードタイプを照会して「-t CNAME」オプションを使用することをお勧めします。また、Aレコードの場合は、何も返さずにホストが返す方法よりもテストが簡単になる可能性があるため、ホストの代わりにdigを使用することを検討することもできます(hostは廃止されましたがわかりません)。たとえば、
$ dig -t CNAME +short ftp.med.cornell.edu
web-prd01.med.cornell.edu.
$ dig -t CNAME +short web-prd01.med.cornell.edu
最後のコマンドには出力はありません。本当にホスティングを使用したい場合:
$ host -t CNAME ftp.med.cornell.edu
ftp.med.cornell.edu is an alias for web-prd01.med.cornell.edu.
$ host -t CNAME web-prd01.med.cornell.edu
web-prd01.med.cornell.edu has no CNAME record
私の考えでは、あなたはこのスクリプトを完成できるはずです。