如何将命令输出存入Bash变量并自动获取Linux服务器网络接口
Bash脚本获取网络接口与命令输出存变量方法
一、将命令输出存入Bash变量的基础方法
在Bash里把命令输出存到变量有两种常用写法,推荐第二种(支持嵌套、可读性更强):
# 写法1:反引号包裹命令 command_output=`ip a` # 写法2:$()包裹命令(更推荐) command_output=$(ip a)
存好后直接用变量名调用即可,比如执行echo $command_output就能打印命令的输出内容。
二、自动获取网络接口的实用方式
根据不同需求,有几种可靠的提取方式:
1. 获取带默认路由的主网卡(最常用)
主网卡是服务器对外通信的核心接口,通过默认路由提取最准确:
main_interface=$(ip route show default | awk '/default/ {print $5}') echo "主网卡接口:$main_interface"
原理:ip route show default输出默认路由信息,awk提取其中第5个字段就是接口名称。
2. 获取所有活跃的非回环接口
如果需要筛选所有处于up状态、排除回环(lo)的接口:
active_interfaces=$(ip link show up | grep -v lo | awk -F': ' '{print $2}' | cut -d'@' -f1) echo "活跃非回环接口:$active_interfaces"
原理:
ip link show up列出所有启用状态的接口grep -v lo排除回环接口awk分割冒号提取接口名部分cut处理带@的接口名(比如enp0s3@if2),只保留前面的主接口名
3. 获取带有IPv4地址的非回环接口
如果要找已分配IP的接口:
ip_interface=$(ip addr show | grep -v lo | grep 'inet ' | awk '{print $NF}') echo "带IPv4的接口:$ip_interface"
原理:grep 'inet '筛选出有IPv4地址的行,$NF取该行最后一个字段(即接口名)
处理多接口场景
如果服务器有多个符合条件的接口,要取第一个的话,追加head -n1即可:
first_active_interface=$(ip link show up | grep -v lo | awk -F': ' '{print $2}' | cut -d'@' -f1 | head -n1)
内容的提问来源于stack exchange,提问作者tops
相关产品推荐
相关产品推荐

