Bash 如何从类似于/etc/hosts的文件中的IP地址获取主机名

Bash 如何从类似于/etc/hosts的文件中的IP地址获取主机名,bash,mapping,traversal,hosts,Bash,Mapping,Traversal,Hosts,我有一个将IP地址映射到主机名的文件。它的格式类似于hosts文件,并包含一个ipaddress到hostname映射的列表 例如 我想使用bash脚本从给定的ipaddress获取主机名 我该怎么做呢?你可以试试: sh script.sh listofip #!/bin/bash echo "IP ?" echo -n "(Value and press Enter) :" read ip while read line do #VAR

我有一个将IP地址映射到主机名的文件。它的格式类似于hosts文件,并包含一个ipaddress到hostname映射的列表

例如

我想使用bash脚本从给定的ipaddress获取主机名

我该怎么做呢?

你可以试试:

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 $1}')
name=$(echo $file1 | awk '{print $2}')


    if [ "$mip" = "$ip" ]
        then
        echo "Machine name is " $name
    fi

done < $1

在Bash4中,我将使用关联数组;看

对于较旧版本的Bash,可以使用一个简单的包装器,例如

lookup () {
    echo "$1" |
    awk 'NR==FNR { a[$1] = $2; next }
        $1 in a { print a[$1]; exit 0 }
        END { exit 1 }' input.txt -
}
这有点不雅观,因为它要求文件存在于当前目录中。您可以将映射文件嵌入脚本本身,尽管这需要一些适度的重构(here文档将绑定标准输入,因此您无法将输入通过管道传输到读取它的脚本)

lookup(){
awk-v q=“$1””$1==q{print$2;退出0}

END{exit 1}'我得到了一个更简单的解决方案

#!/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 $2}'
lookup () {
    echo "$1" |
    awk 'NR==FNR { a[$1] = $2; next }
        $1 in a { print a[$1]; exit 0 }
        END { exit 1 }' input.txt -
}
lookup () {
    awk -v q="$1" '$1 == q { print $2; 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 $2}'