使用read无法获取接口信息

使用read无法获取接口信息

以下链接有一个获取系统信息的脚本:

z3bra 的博客

具体来说,

network() {

   read lo int1 int2 <<< `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`

   if iwconfig $int1 >/dev/null 2>&1; then
       wifi=$int1
       eth0=$int2

   else
      wifi=$int2
      eth0=$int1

   fi

   ip link show $eth0 | grep 'state UP' >/dev/null && int=$eth0     ||int=$wifi

#int=eth0

    ping -c 1 8.8.8.8 >/dev/null 2>&1 && 
        echo "$int connected" || echo "$int disconnected"
}

如果我只是执行:

ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'

我得到了接口列表(如预期)

但如果我执行

 read lo int1 int2 <<< `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`

我什么也没得到。当我检查$lo$int1、 和时$int2,仍然什么也没有。就像阅读没有按预期进行一样。

有人有任何建议来解决这个问题吗?我对 read 的了解还不够,无法真正知道如何调试它。

答案1

尝试将for-loop 与数组一起使用read

for link in `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
do
    int[${#int[*]}]=$link
done

因此,如果 shell 不支持数组,您将收到${int[1]}${int[2]}

i=0
for link in `ip link | sed -n 's/^[0-9]: \(.*\):.*$/\1/p'`
do
    eval int$i=$link
    let i+=1
done

相关内容