Мне нужно указать '-name'
или '-sname'
при запуске виртуальной машины Erlang в зависимости от того, является ли данная строка полностью определенным именем (FQDN) или нет. Каков был бы самый быстрый и независимый от окружающей среды способ подтверждения этого? Меня больше интересует использование некоторой команды bash (например, 'getent'
'nslookup'
или других), а не выражения регулярного выражения. Лучше всего, если он работает в Ubuntu, FreeBSD и Solaris без изменений и может быть легко использован в bash 'if'
.
4 ответа
Хост, кажется, работает:
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
К сожалению, я не могу комментировать, но на самом деле это комментарий к принятому ответу: решение не проверяет, является ли предоставленный аргумент действительно полным доменным именем. Простые имена хостов, которые на самом деле могут быть разрешены, также будут определены (самый простой пример: "localhost"). Поэтому, возможно, название вопроса следует изменить соответствующим образом, если вопрос не для fqdn, а просто для разрешающего имени. Чтобы добавить к решению: если действительно требуется fqdn, вы можете просто проверить точку в указанном имени, например:
is_fqdn() {
hostname=$1
[[ $hostname == *"."* ]] || return 1
host $hostname > /dev/null 2>&1 || return 1
}
Это по-прежнему допускает "localhost.", Но в любом случае это технически fqdn.
Я использую это для проверки доменного имени.
#!/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
Параметр "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.