Linux
在 bash 中創建一個包含所有網路介面的數組
我想在 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