多分隔符打印:为IP地址添加网卡名并过滤lo的脚本优化需求
优化后的脚本与详细解释
没问题,我帮你调整这个脚本,实现显示网卡名称+对应IP,同时自动过滤掉回环接口lo,下面提供两种方案(兼顾旧系统和现代系统):
方案1:兼容传统ifconfig的版本
如果你的系统还在用ifconfig(需要net-tools包支持),可以用这个脚本:
#!/bin/bash echo "Su direccion IP es:" /sbin/ifconfig | awk ' # 匹配网卡名称行(开头是字母/数字,且不是lo),记录网卡名 /^[a-zA-Z0-9]/ && $1 != "lo" { nic = $1 } # 匹配IP地址行,提取并输出"网卡名: IP"格式 /inet addr:/ { split($2, ip, ":"); print nic ": " ip[2] } '
逐行解释:
/^[a-zA-Z0-9]/ && $1 != "lo":匹配ifconfig输出中开头是网卡名称的行(比如eth0:、tun0:),同时排除回环接口lo,把网卡名存到变量nic里。/inet addr:/:匹配包含IP地址的行,用split($2, ip, ":")把addr:xxx.xxx.xxx.xxx分割成数组,ip[2]就是纯IP地址。- 最后用
print nic ": " ip[2]输出符合你要求的格式。
方案2:推荐用现代ip命令的版本
现在很多Linux发行版已经默认弃用ifconfig,改用iproute2工具集的ip命令,这个方案更通用且无需额外安装包:
#!/bin/bash echo "Su direccion IP es:" ip addr show | grep -v 'lo:' | awk '/inet / { split($NF, dev, "@"); print dev[1] ": " $2 }' | cut -d/ -f1
逐行解释:
ip addr show:输出所有网卡的详细信息,格式比ifconfig更规整易处理。grep -v 'lo:':直接过滤掉回环接口lo的所有行。awk '/inet / { split($NF, dev, "@"); print dev[1] ": " $2 }':/inet /:匹配包含IPv4地址的行(格式类似inet 192.168.1.100/24 brd ...)。split($NF, dev, "@"):$NF是行尾的网卡标识(比如eth0或wlan0@wlan0),用@分割后取第一个元素就是纯网卡名。$2是带子网掩码的IP(比如192.168.1.100/24)。
cut -d/ -f1:把IP后面的/24子网掩码去掉,只保留纯IP地址。
输出效果示例
运行后会得到类似这样的结果:
Su direccion IP es: eth0: 192.168.1.100 tun0: 10.8.0.5 wlan0: 192.168.0.200
内容的提问来源于stack exchange,提问作者Andres Julia
相关产品推荐
相关产品推荐

