Bash 在shell脚本中,如何验证给定主机名是否属于localhostname系列
在shell脚本中,如何验证给定主机名是否为localhost 例如: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/
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/hostsgrep中有'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
...