如何在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
相关产品推荐
相关产品推荐

