In a shell script how to validate if a given host name is localhost
for example :-
localhost
127.0.0.1
myhostname.com
::1
all belong to same machine name, Is there any way to identify that a given host name belongs to localhostname family
In a shell script how to validate if a given host name is localhost
for example :-
localhost
127.0.0.1
myhostname.com
::1
all belong to same machine name, Is there any way to identify that a given host name belongs to localhostname family
通常所有本地主机名都在 /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 中有 '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'
你可以检查
sysctl kernel.hostname
IE
sysctl kernel.hostname | grep -c "my_hostname"
我使用以下内容来检查提供的主机名是否与 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 地址——通过正则表达式检查——只运行一次。
然后将该值与主机名实用程序的规范化值或字符串“localhost”进行比较。