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

Bash如何简便提取netstat -m输出的指定值并赋值给变量

简洁实现方案

你原来的多层字符串截取逻辑完全可以简化,下面是几种更易读、更简洁的写法,优先推荐用关键词匹配的方式取数,避免因为输出行序、空行变化导致取值错误:

方案1:awk 一行实现(最推荐)

不需要预先存储全部命令输出,直接通过管道匹配目标行提取数值,兼容性最好:

mbuf=$(netstat -m | awk -F'/' '/mbuf clusters in use/ {print $3}')

逻辑说明:

  • -F'/' 指定斜杠为字段分隔符
  • /mbuf clusters in use/ 精准匹配到mbuf集群统计的目标行,不用硬编码行号
  • 目标行按斜杠拆分后,第三个字段正好是你需要的total值5866,直接输出赋值即可

方案2:纯Bash内置语法(无外部命令依赖)

如果不想调用awk、grep这类外部工具,可以优化你原来的参数展开逻辑,通过固定关键词定位减少截取步骤:

mbuf_stat=$(netstat -m)
# 先截到目标关键词之后的内容
mbuf=${mbuf_stat#*mbuf clusters in use}
# 去掉最后一个斜杠之后的所有内容
mbuf=${mbuf%/*}
# 保留最后一个斜杠之后的内容,就是目标值
mbuf=${mbuf##*/}

方案3:read 按分隔符直接拆分

利用Bash的read命令按指定分隔符拆分字段,一行完成赋值:

IFS='/' read -r _ _ mbuf _ < <(netstat -m | grep -m1 "mbuf clusters in use")

逻辑说明:将斜杠设为字段分隔符,读取匹配到的目标行时,前两个字段存入临时变量_丢弃,第三个字段直接存入mbuf变量,后续字段也统一丢弃。

避坑提示:不要用「取第二行」的逻辑写死行号,不同操作系统、不同内核版本的netstat -m输出前的空行数量、统计项顺序可能存在差异,通过固定关键词匹配目标行的写法稳定性高很多。

内容的提问来源于stack exchange,提问作者TheCyberfreak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:24:28