awk输出到shell变量,shell变量作为搜索模式

时间:2018-03-10 08:37:42

标签: bash awk

我试图使用主机名作为搜索模式(以及以太网接口的名称后缀)找到(使用awk)特定以太网接口的IP。我写了这个小脚本,但没有输出,我也不明白为什么......

#!/bin/bash
name=$(hostname -s)-eth3
IP1=`awk -v var=$name '/var/ {print $1}' /etc/hosts`
echo $IP1

2 个答案:

答案 0 :(得分:1)

您能否进行一些更改,如下所示,这可能会对您有所帮助。

#!/bin/bash
name=$(hostname -s)-eth3
IP1=$(awk -v var=$name '$0 ~ var{print $1}' "/etc/hosts")
echo "$IP1"

不鼓励使用反引号进行更改,以便将值存储在bash变量$中,并使用echo "$var"

答案 1 :(得分:0)

在内部斜杠中,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