我试图使用主机名作为搜索模式(以及以太网接口的名称后缀)找到(使用awk)特定以太网接口的IP。我写了这个小脚本,但没有输出,我也不明白为什么......
#!/bin/bash
name=$(hostname -s)-eth3
IP1=`awk -v var=$name '/var/ {print $1}' /etc/hosts`
echo $IP1
答案 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