请对比两种方案:
方案一:
infs=(`ls /sys/class/net`)
for i in ${infs[*]}
do
get_ip=`ifconfig ${i} 2> /dev/null | awk '/inet/ {print $2}' | cut -f2 -d ":" |awk 'NR==1 {print $1}'`
echo ${get_ip}
done
方案二:
for i in `ifconfig | grep -o ^[a-z0-9:]*`;
do
get_ip=`ifconfig ${i%*:} 2> /dev/null | awk '/inet/ {print $2}' | cut -f2 -d ":" |awk 'NR==1 {print $1}'`
echo ${get_ip}
done
很多人会用第一种方案,其实第二种方案更全面一些~~
差别在于当有一张网卡配多个地址的时候,第一种方案无法列举出所有的IP。
看下面差别:

ls /sys/class/net 无法获取lo:1
![]()
ifconfig | grep -o ^[a-z0-9:]* 可以获取lo:1

本文对比了两种从网络接口获取IP地址的Shell脚本方案。第一种方案使用`ls /sys/class/net`来枚举网络接口,而第二种方案通过`ifconfig`命令的输出进行解析,能更全面地处理多IP地址的情况,特别是在一张网卡配置了多个地址的场景下,第二种方案的表现更为优越。
1211

被折叠的 条评论
为什么被折叠?



