正確に 0 または 1 の回答を取得するには:
dig +short gmail.com mx | sort -n | nawk '{print $2; exit}' | dig +short -f -
dig
をサポートする非エンシェントが必要です+short
。
前述のように、プリファレンスは一意である必要がないため、複数の「プライマリ」MX が存在する場合があります。最も低い設定レコードのすべての IP アドレスが必要な場合は、次のようにします。
dig +short oracle.com mx | sort -n |
nawk -v pref=65536 '($1<=pref) {pref=$1; print $2}' |
dig +short -f - | uniq
これは、MX レコードがなく、A レコードが電子メールを受け入れるケースを処理しません。これは一般的ではありませんが、完全に有効な構成です。
悲しいことに、dig
私がテストしたすべてのバージョンは、ドメイン (NXDOMAIN) が存在するかどうか、および MX レコードが存在するかどうかにかかわらず、0 を返します。ただし、DNS タイムアウト (rc=9) をキャッチできます。関連するhost
コマンドはNXDOMAIN でゼロ以外の rc を返しますが、その動作は少し一貫性がなく、スクリプトが面倒で、出力の解析が困難です。
コマンドに応じて、わずかに堅牢になる可能性のある貧乏人のエラーチェックバージョン(tripleeeのコメントに触発された)は次のとおりです。host
DOMAIN=gmail.com
if ! host -t any $DOMAIN >/dev/null 2>&1 ; then
echo "no such domain"
elif ! host -t mx $DOMAIN >/dev/null 2>&1; then
echo "no MX records"
else
dig +short $DOMAIN mx | sort -n | nawk '{print $2; exit}' | dig +short -f -
fi
(逆に、テストが機能するために古いバージョンのhost
( bind-8.x
)が必要な場合があります-t mx
。新しいバージョンでは代わりに 0 が返されます。)
これはちょうど、なぜ/ /を使用しないのかと、人々が神経質に後ずさりし始めるところです。perl
python
$MFTL
本当に堅牢なバージョンを bash で作成する必要がある場合は、 djbdns CLI ツールとデバッグ ツールを調べてください。これらのツールの方が解析が簡単です (残念ながら、ユーザー終了コードも設定しないでください)。