【发布时间】:2018-03-10 16:55:32
【问题描述】:
我正在尝试使用主机名作为搜索模式(以以太网接口名称为后缀)来查找(使用 awk)特定以太网接口的 IP。我写了这个小脚本,但它什么也没输出,我不明白为什么......
#!/bin/bash
name=$(hostname -s)-eth3
IP1=`awk -v var=$name '/var/ {print $1}' /etc/hosts`
echo $IP1
【问题讨论】:
我正在尝试使用主机名作为搜索模式(以以太网接口名称为后缀)来查找(使用 awk)特定以太网接口的 IP。我写了这个小脚本,但它什么也没输出,我不明白为什么......
#!/bin/bash
name=$(hostname -s)-eth3
IP1=`awk -v var=$name '/var/ {print $1}' /etc/hosts`
echo $IP1
【问题讨论】:
您能否进行如下所示的一些更改,这可能会对您有所帮助。
#!/bin/bash
name=$(hostname -s)-eth3
IP1=$(awk -v var=$name '$0 ~ var{print $1}' "/etc/hosts")
echo "$IP1"
不鼓励在 bash 变量中存储值时使用反引号等更改 $,也应使用 echo "$var"。
【讨论】:
在斜线内,awk 将 var 视为文字字符串,而不是变量。
因此,替换:
/var/
与:
$0 ~ var
因此使用:
#!/bin/bash
name=$(hostname -s)-eth3
ip1=`awk -v var=$name '$0 ~ var {print $1}' /etc/hosts`
echo "$ip1"
下面的第一个 awk 脚本没有产生匹配,但第二个却产生了:
$ echo host-eth1 | awk -v var='host-eth1' '/var/ {print $1}'
$ echo host-eth1 | awk -v var='host-eth1' '$0 ~ var {print $1}'
host-eth1
【讨论】: