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

如何在Bash脚本中获取指定网卡的全局IPv6地址

如何在Bash脚本中获取指定网卡的全局IPv6地址

嘿,我完全懂你要在Bash脚本里提取指定网卡(比如你的ens18)的全局IPv6地址的需求,刚好之前我也处理过类似场景,给你几个实用又靠谱的方法:

方法一:用ip命令直接筛选(最简洁)

ip命令本身就支持指定网卡和地址范围,我们可以直接缩小输出范围,再提取地址:

# 获取ens18网卡的所有全局IPv6地址
ip -6 addr show dev ens18 scope global | awk '/inet6/ {print $2}' | cut -d'/' -f1

如果只需要第一个全局地址,加个head -1就行:

ip -6 addr show dev ens18 scope global | awk '/inet6/ {print $2}' | cut -d'/' -f1 | head -1

解释:

  • ip -6 addr show dev ens18 scope global:只输出ens18网卡下scope global类型的IPv6地址(这正是你要的全局地址)
  • awk '/inet6/ {print $2}':提取包含inet6行的第二个字段(也就是带前缀长度的地址)
  • cut -d'/' -f1:把地址和后面的/64前缀长度分开,只保留纯地址

方法二:用grep+sed组合筛选

如果你习惯用文本处理工具,也可以这样写:

ip -6 addr | grep -A2 ens18 | grep 'scope global' | sed 's/.*inet6 \(.*\)\/.*/\1/'

解释:

  • grep -A2 ens18:找到ens18的行,并输出后面2行(包含地址信息)
  • grep 'scope global':从结果里筛选出全局地址的行
  • sed 's/.*inet6 \(.*\)\/.*/\1/':用正则匹配提取出inet6后面的纯地址

完整脚本示例

把逻辑封装成脚本,方便复用:

#!/bin/bash
# 指定要查询的网卡
INTERFACE="ens18"

# 获取第一个全局IPv6地址
GLOBAL_IPV6=$(ip -6 addr show dev "$INTERFACE" scope global | awk '/inet6/ {print $2}' | cut -d'/' -f1 | head -1)

# 判断是否获取到地址
if [ -n "$GLOBAL_IPV6" ]; then
    echo "网卡$INTERFACE的全局IPv6地址是: $GLOBAL_IPV6"
else
    echo "未找到网卡$INTERFACE的全局IPv6地址,请检查网卡名称或网络配置"
fi

备注:内容来源于stack exchange,提问作者Boris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:44:35