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

以下は、インターフェース「enp0s3」、「enp0s8」、「enp0s9」にマップされる新しい接続名「ABC」、「DEF」、「GHI」を生成することです。これらのインターフェイスは 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

ABC2番目のコマンドでは、まず、、、、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

関連情報