목표는 기존 연결 이름을 삭제하고 새 연결 "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
두 번째 명령의 경우 먼저 , 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