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

喜欢插入 'hostname -f' 的输出而不是 'bert' 或 www.google.com 如果主机名是 FQDN,则脚本应该继续,否则应该出现错误消息。PS。TLD 是否存在并不重要。例如。hostname.domain 是 FQDN 或 hostname.domain.tld 是 FQDN。TLD 在互联网上是否有效对我来说并不重要。主机名 -f 的输出

4

2 回答 2

2

确保主机名完全合格的常用方法是指定最终.名称(通常省略)example.com.:.

但是,从对问题的评论来看,您似乎需要一个简单的字符串比较 - 如果 a.出现在任何地方,则假定该名称有效,否则出错。最简单的方法是将名称与首先.删除的副本进行比较 - 如果两者相同,则无需.删除:

if [ "$h" != "${h/.}" ]
then echo "$h is acceptable" >&2
else echo "$h is not acceptable" >&2
fi
于 2017-06-05T12:54:26.717 回答
0
for h in "bert" "ernie" "www.google.com"
do
    if [[ ${h//[^.]} != "" ]]
    then
        echo "$h contains ."
    else
        echo "$h doesn't contain ."
    fi
done

如果它支持正则表达式

if [[ $h =~ \. ]]; then
于 2017-06-05T12:15:01.517 回答