Linux

在 bash 中創建一個包含所有網路介面的數組

  • November 21, 2019

我想在 Bash 中創建一個包含所有活動網路介面的數組。

我設法創建了一個列印它們的 for 循環,但是當我嘗試創建數組時,它只包含最後一個lo介面,而不包含另一個介面。這是我的程式碼:

#!/bin/bash

for iface in $(ifconfig | cut -d ' ' -f1| tr ':' '\n' | awk NF)
do
          printf "$iface%s\n"
          declare -a array_test=["$iface"]
done
for i in "${array_test[@]}"; do echo "$i"; done

這是我的輸出:

eno1
eno2
eno3
lo
[lo]

另外,如何從數組中排除 lo localhost 介面?

這是一個解決方案,分配列表,然後向其中添加項目:

#!/bin/bash

array_test=()
for iface in $(ifconfig | cut -d ' ' -f1| tr ':' '\n' | awk NF)
do
       printf "$iface\n"
       array_test+=("$iface")
done
echo ${array_test[@]}

如果您希望輸出每行顯示一項:

for i in "${array_test[@]}"; do echo "$i"; done

從輸出中刪除 localhost:

if [ "$iface" != "lo" ] 
then
   array_test+=("$iface")
fi

我的嘗試:

readarray -t interfaces < <(ip l | awk -F ":" '/^[0-9]+:/{dev=$2 ; if ( dev !~ /^ lo$/) {print $2}}')
for i in "${interfaces[@]// /}" ; do echo "$i" ; done

引用自:https://unix.stackexchange.com/questions/412516