1

Мне нужно указать '-name' или '-sname' при запуске виртуальной машины Erlang в зависимости от того, является ли данная строка полностью определенным именем (FQDN) или нет. Каков был бы самый быстрый и независимый от окружающей среды способ подтверждения этого? Меня больше интересует использование некоторой команды bash (например, 'getent' 'nslookup' или других), а не выражения регулярного выражения. Лучше всего, если он работает в Ubuntu, FreeBSD и Solaris без изменений и может быть легко использован в bash 'if' .

4 ответа4

1

Хост, кажется, работает:

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

К сожалению, я не могу комментировать, но на самом деле это комментарий к принятому ответу: решение не проверяет, является ли предоставленный аргумент действительно полным доменным именем. Простые имена хостов, которые на самом деле могут быть разрешены, также будут определены (самый простой пример: "localhost"). Поэтому, возможно, название вопроса следует изменить соответствующим образом, если вопрос не для fqdn, а просто для разрешающего имени. Чтобы добавить к решению: если действительно требуется fqdn, вы можете просто проверить точку в указанном имени, например:

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

Это по-прежнему допускает "localhost.", Но в любом случае это технически fqdn.

0

Я использую это для проверки доменного имени.

#!/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

Параметр "ndots" имени хоста можно использовать для выполнения всего этого одной командой:

host -N 0 $hostname

Это не добавит домены, перечисленные в директиве search или domain в /etc/resolv.conf.

Обновление с примером:

Предположим, у вас есть переменная "hostname", которая содержит строку, которую вы хотите знать, если строка является полным доменным именем. Используя простой "host", он будет пытаться использовать строку, а если не найден, он будет добавлять "search" и "domain" из "/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" не является полным доменным именем. Если это было полное доменное имя, оно должно быть найдено "хостом".

Еще одно обновление:

Я использую Linux, но предположил, что команда "host" такая же, как во FreeBSD.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .