如何在Linux/Ubuntu中用Bash获取DHCP服务器IP地址
从dhclient输出中提取DHCP服务器IP的方法及Bash脚本
示例dhclient -v输出(中文翻译)
# dhclient -v Internet Systems Consortium DHCP 客户端 4.4.1 版权所有 2004-2018 Internet Systems Consortium。 保留所有权利。 正在监听 LPF/ens3/fa:16:3e:9e:33:25 正在发送至 LPF/ens3/fa:16:3e:9e:33:25 正在发送至 Socket/fallback 向 255.255.255.255 端口 67 发送针对 123.123.123.123 的 DHCPREQUEST(xid=0x77420868) 从 123.235.44.1 收到针对 123.123.123.123 的 DHCPACK(xid=0x68084277) RTNETLINK 返回:文件已存在 已绑定至 123.123.123.123 -- 续约将在 33881 秒后进行。
提取方法
核心思路是定位包含DHCPACK且带有from关键字的行,从中提取IP地址,以下是两种常用实现方式:
1. 单行命令实现
可以直接通过管道组合工具完成提取:
- 用
awk提取字段:
dhclient -v 2>&1 | awk '/DHCPACK/ {print $5}'
解释:DHCPACK行中,DHCP服务器IP是第5个字段(对应from后的内容),通过awk匹配该行并输出第5个字段即可。
- 用
grep正则匹配:
dhclient -v 2>&1 | grep -oP 'DHCPACK .* from \K[\d.]+'
解释:-P启用Perl正则,\K用于忽略前面的匹配内容,[\d.]+匹配IP格式的字符串。
2. 独立Bash脚本
将提取逻辑封装成可复用脚本,保存为get_dhcp_server.sh:
#!/bin/bash # 捕获dhclient输出并提取DHCP服务器IP dhcp_server_ip=$(dhclient -v 2>&1 | awk '/DHCPACK/ {print $5}') # 验证提取结果 if [[ -n "$dhcp_server_ip" ]]; then echo "$dhcp_server_ip" else echo "未能提取到DHCP服务器IP" >&2 exit 1 fi
使用方法:
- 给脚本添加执行权限:
chmod +x get_dhcp_server.sh - 运行脚本:
./get_dhcp_server.sh
内容的提问来源于stack exchange,提问作者user199727
相关产品推荐
相关产品推荐

