You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多分隔符打印:为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:31:30