在 bash 中创建一个包含所有网络接口的数组

Geo*_*nov 9 linux networking bash ifconfig

我想在 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
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

eno1
eno2
eno3
lo
[lo]
Run Code Online (Sandbox Code Playgroud)

另外,如何从数组中排除 lo localhost 接口?

Kev*_*ire 9

这是一个解决方案,分配列表,然后向其中添加项目:

#!/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[@]}
Run Code Online (Sandbox Code Playgroud)

如果您希望输出每行显示一个项目:

for i in "${array_test[@]}"; do echo "$i"; done
Run Code Online (Sandbox Code Playgroud)

从输出中删除 localhost:

if [ "$iface" != "lo" ] 
then
    array_test+=("$iface")
fi
Run Code Online (Sandbox Code Playgroud)


bas*_*lab 6

我的尝试:

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