【问题标题】:Check if the hostname is fully qualified (FQDN)检查主机名是否完全限定 (FQDN)
【发布时间】:2023-03-15 23:31:02
【问题描述】:
#!/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 在互联网上是否有效对我来说并不重要。 output of hostname -f

【问题讨论】:

  • 如果TLD不存在,你怎么知道它是否完全合格?
  • 主机名 = 非 FQDN 和 hostname.domain = FQDN
  • 顺便说一句,test $? 是一种反模式——只需在if 中直接使用host 的结果即可;例如,if host "$h" >/dev/null 2>&1; then ...; fi
  • 如果你只想要hostname -f的输出,你为什么要问这个问题?
  • 我想要使用 hostname -f 的输出来确定我想要继续还是退出 te 脚本。 hostname only 是 exit,fqdn 表示 continue。

标签: bash fqdn


【解决方案1】:

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

但是,从 cmets 到问题,您似乎需要一个简单的字符串比较 - 如果 . 出现在任何地方,则假定该名称有效,否则出错。最简单的方法是将名称与删除了第一个 . 的副本进行比较 - 如果两者相同,则没有要删除的 .

if [ "$h" != "${h/.}" ]
then echo "$h is acceptable" >&2
else echo "$h is not acceptable" >&2
fi

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

    • 我想要“hostname -f”的输出而不是bert或ernie,你能做到吗?
    • hostname -f "$h" ?
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多