其目标是删除现有连接名称并创建新连接“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