目的は、既存の接続名を削除し、新しい接続「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
ABC
2番目のコマンドでは、まず、、、、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