如何使用 awk 输出来构造命令

如何使用 awk 输出来构造命令

其目标是删除现有连接名称并创建新连接“ABC”“DEF”“GHI”并映射到现有设备(不包括 lo)。

#!/bin/bash

conname=$(nmcli con  | awk ' $1 !~ "NAME|lo"{print $1}')
ifname=$(nmcli dev  | awk ' $1 !~ "DEVICE|lo"{print $1}')

echo $conname
echo $ifname

上面返回以下值:

test3 test4 test5
enp0s3 enp0s8 enp0s9

如何使用 awk 之前的输出生成以下命令行

nmcli con del test3
nmcli con del test4
nmcli con del test5

以下是创建新的连接名称“ABC”、“DEF”、“GHI”,它们映射到接口“enp0s3”、“enp0s8”、“enp0s9”。这些接口由 awk 识别。新连接名称是固定名称。

nmcli con add type ethernet con-name ABC ifname enp0s3
nmcli con add type ethernet con-name DEF ifname enp0s8
nmcli con add type ethernet con-name GHI ifname enp0s9

我希望这更清楚。

答案1

而且 - 正如awk所使用的那样 - 为什么不呢

$ nmcli con | awk '$1 !~ "NAME|lo" {print "nmcli con del *" $1 "*"}' 
nmcli con del *test3*
nmcli con del *test4*
nmcli con del *test5*
$ nmcli dev | awk '$1 !~ "DEVICE|lo" {print "nmcli con add type ethernet con-name ABC ifname", $1}'

如果您告诉我们如何分配“不同的名称,即“ABC”“DEF”“GHI””,那么也可以将其合并。

答案2

只需通过 while 循环传递命令即可。

$ nmcli con | awk ' $1 !~ "NAME|lo"{print $1}' | while IFS= read -r line; do echo nmcli con del "$line"; done
nmcli con del test3
nmcli con del test4
nmcli con del test5

ABC对于第二个命令,我们首先创建, DEF, , 字符串数组GHI,然后从中增量读取。

$ declare -a arr
$ arr=(ABC DEF GHI)
$ i=0
$ nmcli dev | awk ' $1 !~ "DEVICE|lo"{print $1}' | while IFS= read -r line; do echo nmcli con add type ethernet con-name ${arr[$i]} ifname "$line"; ((i+=1)); done
nmcli con add type ethernet con-name ABC ifname enp0s3
nmcli con add type ethernet con-name DEF ifname enp0s8
nmcli con add type ethernet con-name GHI ifname enp0s9

相关内容