web-dev-qa-db-ja.com

指定された文字列が有効なFQDN名であるかどうかを確認する最も簡単な方法は?

Erlangを開始するときに'-name'または'-sname'のいずれかを指定する必要がありますVM指定された文字列が完全修飾名(FQDN)であるかどうかによって異なります。それを検証する最も迅速で環境に依存しない方法ですか?regex式ではなくbashコマンド('getent''nslookup'など)を使用することに興味があります。Ubuntu、FreeBSDで機能する場合に最適です。およびSolarisは変更なしで、bashの'if'で簡単に使用できます。

1
Greg

ホストは機能しているようです:

jalderman@mba:/tmp$ cat test.sh
#!/bin/bash

for h in "bert" "ernie" "www.google.com"
do
    Host $h 2>&1 > /dev/null
    if [ $? -eq 0 ]
    then
        echo "$h is a FQDN"
    else
        echo "$h is not a FQDN"
    fi
done

jalderman@mba:/tmp$ ./test.sh 
bert is not a FQDN
ernie is not a FQDN
www.google.com is a FQDN
1
Jason

残念ながら、コメントすることはできませんが、これは実際には受け入れられた回答へのコメントです。ソリューションは、提供された引数が本当にFQDNであるかどうかをチェックしません。実際に解決できる単純なホスト名も修飾されます(最も単純な例:「localhost」)。したがって、質問がfqdnではなく、単に解決する名前である場合は、それに応じて質問のタイトルを変更する必要があります。実際にソリューションに追加するには:fqdnが本当に必要な場合は、次のように、指定された名前のドットを確認するだけです。

is_fqdn() {
  hostname=$1
  [[ $hostname == *"."* ]] || return 1
  Host $hostname > /dev/null 2>&1 || return 1
}

これでも「localhost。」は使用できますが、技術的にはfqdnです。

1
Nicolai Ehemann

/ usr/bin/Hostの使用は私の好みには遅すぎると思います。私の目的では、文字列にドットが含まれているかどうかを知るだけで済みます。 https://unix.stackexchange.com/questions/63361/test-if-a-string-has-a-period-in-it-with-bash を参照してください

0
wytten

私はこれをドメイン名の検証に使用します。

#!/bin/bash
DOMAIN=example.com    
[ -z "$(Dig +short "$DOMAIN")" ]  &&  echo "$DOMAIN could not be looked up"

Digを取得するには:

  • Debian/Ubuntu-apt-get install dnsutils
  • CentOS-yum install bind-utils
0
Tirsvad

ホスト名の「ndots」オプションを使用すると、すべてを1つのコマンドで実行できます。

Host -N 0 $hostname

これにより、/ etc /resolv.confのsearchまたはdomainディレクティブにリストされているドメインは追加されません。

例を使用して更新:

文字列がFQDNであるかどうかを知りたい、文字列を含む変数「hostname」があるとします。単純な「ホスト」を使用して文字列を試行し、見つからない場合は「/etc/resolv.conf」から「検索」と「ドメイン」を追加します。

$ hostname=www
$ Host $hostname
www.example.com has address 192.168.0.1
$ Host -N 0 $hostname
Host www not found: 3(NXDOMAIN)
$ echo $?
1

つまり、「www」はnot FQDNです。 FQDNの場合は、「ホスト」によって検出されます。

別の更新:

私はLinuxを使用していますが、「Host」コマンドはFreeBSDの場合と同じであると想定しています。

0
Marco