Bash 在shell脚本中,如何验证给定主机名是否属于localhostname系列

Bash 在shell脚本中,如何验证给定主机名是否属于localhostname系列,bash,shell,networking,Bash,Shell,Networking,在shell脚本中,如何验证给定主机名是否为localhost 例如: localhost 127.0.0.1 myhostname.com ::1 所有主机都属于同一机器名,是否有任何方法可以识别给定主机名属于localhostname系列通常所有本地主机名都位于/etc/hosts文件中: grep -c machine_name /etc/hosts 如果机器名在localhost中,则上面的命令返回1或更大,否则返回0 例如: grep -c myhostname.com /etc/

在shell脚本中,如何验证给定主机名是否为localhost

例如:

localhost
127.0.0.1
myhostname.com
::1

所有主机都属于同一机器名,是否有任何方法可以识别给定主机名属于localhostname系列

通常所有本地主机名都位于/etc/hosts文件中:

grep -c machine_name /etc/hosts
如果机器名在localhost中,则上面的命令返回1或更大,否则返回0

例如:

grep -c myhostname.com /etc/hosts
1

grep -c google.com /etc/hosts
0
不确定这是否正是你要找的,但我希望这会有所帮助

注意部分匹配,例如,如果您在/etc/hosts
grep中有'myhost',那么-c host
也将返回1。在这种情况下,您需要使用正则表达式或使用cut、awk和类似工具解析/etc/hosts文件。或使用以下命令:

grep -c  '\bmachine name\b'
要跳过注释,请使用以下命令:

grep -v '^#.*' /etc/hosts | grep -c machine_name
因此,全权指挥是必要的

grep -v '^#.*' /etc/hosts | grep -c '\bmachine_name\b'
你可以查一下

sysctl kernel.hostname
i、 e


我使用以下命令检查提供的主机名是否与localhost相同:

hostname_ip(){
   host "$1" | sed -e 's/.* \([^ ]*[^ .]\)\.*$/\1/'
}

normalize_hostname(){
   local normalized="$1"
   grep -q "^\(\([0-9]{1,3}\)\.\)\{3\}\([0-9]{1,3}\)$" <<< "$normalized" || normalized="$(hostname_ip "$normalized")"
   normalized="$(hostname_ip "$normalized")"
   echo "$normalized"
}

myname="$(normalize_hostname "$(hostname)")"
argname="$(normalize_hostname "$1")"

if [[ "$myname" == "$argname" || "$argname" == "localhost" ]]; then
   ...
hostname\u ip(){
主机“$1”| sed-e的/*\([^]*[^.]\)\.*$/\1/'
}
规范化_主机名(){
本地标准化=“$1”

grep-q“^\([0-9]{1,3}\)\{3}\([0-9]{1,3}\)$”@Ignacio:我已经更新了答案,我想你是指那个问题。这不起作用,在像#google.com这样的场景中,/etc/hosts对此进行了评论。我也添加了一个修复程序。@AlecTMH仍然是一个灰色区域,并非所有主机信息都会在/etc/hosts文件中。非常感谢你所做的努力。
hostname_ip(){
   host "$1" | sed -e 's/.* \([^ ]*[^ .]\)\.*$/\1/'
}

normalize_hostname(){
   local normalized="$1"
   grep -q "^\(\([0-9]{1,3}\)\.\)\{3\}\([0-9]{1,3}\)$" <<< "$normalized" || normalized="$(hostname_ip "$normalized")"
   normalized="$(hostname_ip "$normalized")"
   echo "$normalized"
}

myname="$(normalize_hostname "$(hostname)")"
argname="$(normalize_hostname "$1")"

if [[ "$myname" == "$argname" || "$argname" == "localhost" ]]; then
   ...