在shell脚本中,如何验证给定主机名是否为localhost
例如:
localhost
127.0.0.1
myhostname.com
::1所有主机都属于同一计算机名,有没有办法确定给定的主机名属于localhostname系列
发布于 2013-01-15 22:28:17
通常,所有本地主机名都在/etc/hosts文件中:
grep -c machine_name /etc/hosts如果机器名在本地主机中,则上面的命令返回1或更大,否则为0。
例如:
grep -c myhostname.com /etc/hosts
1
grep -c google.com /etc/hosts
0我不确定这是否是你想要的,但我希望它能有所帮助。
注意部分匹配,例如,如果/etc/hosts中有'myhost‘,grep -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'发布于 2013-01-15 23:05:28
你可以检查
sysctl kernel.hostnamei.e
sysctl kernel.hostname | grep -c "my_hostname"发布于 2015-07-20 20:10:25
我使用以下命令检查提供的主机名是否与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
...首先,通过运行两次将提供的参数规范化为主机实用程序设置的格式。如果提供了IP地址--由regex检查--那么只运行一次。
然后将该值与主机名实用程序的标准化值或字符串"localhost“进行比较。
https://stackoverflow.com/questions/14338808
复制相似问题