如何从类似于 /etc/hosts 的文件中的 IP 地址获取主机名
How to get hostname from IP address from file similar to /etc/hosts
我有一个将 IP 地址映射到主机名的文件。它的格式类似于主机文件,包含一个 IP 地址到主机名映射的列表。
例如
10.200.99.1 master1
10.200.99.2 master2
10.200.99.3 master3
10.200.99.4 slave1
10.200.99.5 slave2
10.200.99.6 slave3
...
...
...
我想使用 bash 脚本从给定的 IP 地址获取主机名。
我该怎么做?
你可以试试看:
sh script.sh listofip
#!/bin/bash
echo "IP ?"
echo -n "(Value and press Enter) :"
read ip
while read line
do
#VARIABLES
file1=$line
mip=$(echo $file1 | awk '{print }')
name=$(echo $file1 | awk '{print }')
if [ "$mip" = "$ip" ]
then
echo "Machine name is " $name
fi
done <
结果:
IP ?
(Value and press Enter) :10.200.99.2
Machine name is master2
在Bash4中,我会使用关联数组;参见 http://mywiki.wooledge.org/BashFAQ/006#Associative_Arrays
对于旧版本的 Bash,可以使用简单的包装器,例如
lookup () {
echo "" |
awk 'NR==FNR { a[] = ; next }
in a { print a[]; exit 0 }
END { exit 1 }' input.txt -
}
这有点不雅,因为它要求文件存在于当前目录中。您可以将映射文件嵌入脚本本身,尽管这需要一些适度的重构(此处的文档将绑定标准输入,因此您无法将输入通过管道传输到读取它的脚本)。
lookup () {
awk -v q="" ' == q { print ; exit 0 }
END { exit 1 }' <<'________HERE'
10.200.99.1 master1
10.200.99.2 master2
10.200.99.3 master3
10.200.99.4 slave1
10.200.99.5 slave2
10.200.99.6 slave3
________HERE
}
我得到了一个更简单的解决方案
#!/bin/bash
### GET IP ADDRESS ###
echo "IP Address ?"
echo -n "(Value and press Enter) :"
read ip_address
### Find Hostname matching to IPADDRESS ###
grep $ip_address /etc/hosts | awk '{print }'
我有一个将 IP 地址映射到主机名的文件。它的格式类似于主机文件,包含一个 IP 地址到主机名映射的列表。
例如
10.200.99.1 master1
10.200.99.2 master2
10.200.99.3 master3
10.200.99.4 slave1
10.200.99.5 slave2
10.200.99.6 slave3
...
...
...
我想使用 bash 脚本从给定的 IP 地址获取主机名。
我该怎么做?
你可以试试看:
sh script.sh listofip
#!/bin/bash
echo "IP ?"
echo -n "(Value and press Enter) :"
read ip
while read line
do
#VARIABLES
file1=$line
mip=$(echo $file1 | awk '{print }')
name=$(echo $file1 | awk '{print }')
if [ "$mip" = "$ip" ]
then
echo "Machine name is " $name
fi
done <
结果:
IP ?
(Value and press Enter) :10.200.99.2
Machine name is master2
在Bash4中,我会使用关联数组;参见 http://mywiki.wooledge.org/BashFAQ/006#Associative_Arrays
对于旧版本的 Bash,可以使用简单的包装器,例如
lookup () {
echo "" |
awk 'NR==FNR { a[] = ; next }
in a { print a[]; exit 0 }
END { exit 1 }' input.txt -
}
这有点不雅,因为它要求文件存在于当前目录中。您可以将映射文件嵌入脚本本身,尽管这需要一些适度的重构(此处的文档将绑定标准输入,因此您无法将输入通过管道传输到读取它的脚本)。
lookup () {
awk -v q="" ' == q { print ; exit 0 }
END { exit 1 }' <<'________HERE'
10.200.99.1 master1
10.200.99.2 master2
10.200.99.3 master3
10.200.99.4 slave1
10.200.99.5 slave2
10.200.99.6 slave3
________HERE
}
我得到了一个更简单的解决方案
#!/bin/bash
### GET IP ADDRESS ###
echo "IP Address ?"
echo -n "(Value and press Enter) :"
read ip_address
### Find Hostname matching to IPADDRESS ###
grep $ip_address /etc/hosts | awk '{print }'