以下链接有一个获取系统信息的脚本:
具体来说,
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