我对编程非常陌生,我想知道如何存储和打印 bash 中递增的变量。
#!/bin/bash
ethcounter=$(ifconfig -a | egrep --count "eth")
ethindex0=$((ethcounter-1))
echo ethindex0 = $ethindex0
for ((i=0; i<=ethindex0; i++))
do
eth[$i]=$(ifconfig eth$i)
echo "eth[$i]" = "$eth[$i]"
done
这里的最终目标是存储执行 ifconfig 时可以看到的每个 eth 设备的 IP 地址。
eth0 = ifconfig eth0 ... IP address
eth1 = ifconfig eth1 ... IP address
我需要一种方法来操纵输出ifconfig
以便存储 IP 地址。实现这一目标的最佳方法是什么?
答案1
您不需要做太多事情,只需将eth
变量声明为数组(并更改它的访问方式):
#!/bin/bash
ethcounter=$(ifconfig -a | egrep --count "eth[0-9]+")
ethindex0=$((ethcounter-1))
declare -a eth
echo ethindex0 = $ethindex0
for ((i=0; i<=ethindex0; i++))
do
eth[$i]=$(ifconfig eth$i)
echo "eth[$i]" = "${eth[$i]}"
done
我还稍微调整了您的egrep
参数,因为它匹配包含单词“ether”的行。当然,它可能需要更多,但您可以尝试自己找出答案。
正如乔丹在评论中正确指出的那样:不要假设接口是按顺序编号的。您应该grep
放弃您想要的任何内容,并处理您获得的所有值,并将它们存储在关联数组中(通过接口名称而不是数字进行索引)。
附注:接口可以有多个 IP 地址。那,以及ifconfig
进入弃用,可能会鼓励您改用ip
它,特别是ip addr
- 因为这里支持这种情况。