告别繁琐命令行!一个脚本搞定Linux网卡IP配置(DHCP/静态一键切换)

发布时间:2026/6/14 21:35:05

告别繁琐命令行!一个脚本搞定Linux网卡IP配置(DHCP/静态一键切换) 推荐理由还在对着ifconfig、ip、nmcli一堆命令头疼每次配IP都要查参数、改文件、重启网络这个Bash脚本让你1分钟完成网卡信息查看、DHCP/静态IP切换甚至自动处理NetworkManager连接——运维小白也能轻松上手 前言Linux下配置网络IP传统方式要修改/etc/network/interfaces或/etc/sysconfig/network-scripts/ifcfg-*再重启网络服务用nmcli虽然现代但记住一堆子命令也不轻松。今天给大家分享一个全交互式脚本它会自动列出所有非环回网卡让你选序号或直接输名字然后选择DHCP或静态IP最后自动应用配置并重启网卡生效——整个过程只要输入几个数字/参数✨ 脚本亮点功能说明自动提权检测如果不是root执行直接提示退出避免权限不足导致的配置失败网卡信息表格化序号、网卡名、MAC地址、IPv4地址、状态一目了然智能匹配连接自动获取现有NetworkManager连接名没有则新建⚡️双模式配置DHCP自动获取 / 静态IP手动输入IP/掩码、网关、DNS自动重启网卡配置完成后执行nmcli device reapply失败则自动断开重连✅最终配置展示显示生效后的IPv4地址、网关、DNS方便核对 效果预览运行脚本后你会看到类似下面的界面 网卡详细信息 序号 网卡名称 MAC 地址 IPv4 地址 状态 ------------------------------------------------------------------------------- 1 eth0 AA:BB:CC:DD:EE:FF 192.168.1.100 UP 2 wlan0 11:22:33:44:55:66 - DOWN 请输入网卡编号 (1-2) 或直接输入网卡名称: 1 已选择网卡: eth0 请选择 IP 配置方式: 1) DHCP (自动获取) 2) 静态 IP (手动输入) 请输入 1 或 2: 2 请输入以下信息 (按顺序): 1) IP地址/掩码 (例如 192.168.1.100/24): 192.168.1.50/24 2) 网关地址 (例如 192.168.1.1): 192.168.1.1 3) DNS 服务器 (多个用空格分隔, 例如 8.8.8.8 8.8.4.4): 114.114.114.114 8.8.8.8 正在应用静态 IP 配置... 网卡配置已重新应用。 网卡重启完成。 配置已应用并重启网卡生效 网卡: eth0 当前 IPv4 信息: IP4.ADDRESS[1]: 192.168.1.50/24 IP4.GATEWAY: 192.168.1.1 IP4.DNS[1]: 114.114.114.114 IP4.DNS[2]: 8.8.8.8 如何使用1️⃣ 环境要求Linux操作系统已安装NetworkManager绝大多数桌面Linux和服务器版默认都有nmcli、ip、awk、grep等基础命令可用root权限建议用sudo执行2️⃣ 下载脚本复制下面的完整代码保存为network_config.sh#!/bin/bash # 检查 root 权限 if [ $EUID -ne 0 ]; then echo 请以 root 权限运行此脚本例如 sudo。 exit 1 fi # 检查 nmcli 是否可用 if ! command -v nmcli /dev/null; then echo 未找到 nmcli 命令。请确保 NetworkManager 已安装并运行。 exit 1 fi # 获取所有非环回网卡 mapfile -t interfaces (ip -br link show | grep -v LOOPBACK | awk {print $1}) if [ ${#interfaces[]} -eq 0 ]; then echo 未找到任何非环回网卡。 exit 1 fi # 显示详细网卡信息表格 echo 网卡详细信息 printf %-4s %-12s %-18s %-16s %-6s\n 序号 网卡名称 MAC 地址 IPv4 地址 状态 echo ------------------------------------------------------------------------------- for i in ${!interfaces[]}; do iface${interfaces[$i]} mac$(ip link show $iface | awk /link/ether/ {print $2}) [ -z $mac ] mac- ipv4$(ip -4 addr show $iface | grep -oP (?inet\s)\d(.\d){3} | head -n1) [ -z $ipv4 ] ipv4- state$(ip link show $iface | grep -oP (?state\s)[A-Z]) [ -z $state ] stateUNKNOWN printf %-4s %-12s %-18s %-16s %-6s\n $((i1)) $iface $mac $ipv4 $state done echo # 用户选择网卡 read -p 请输入网卡编号 (1-${#interfaces[]}) 或直接输入网卡名称: choice if [[ $choice ~ ^[0-9]$ ]]; then if [ $choice -ge 1 ] [ $choice -le ${#interfaces[]} ]; then interface${interfaces[$((choice-1))]} else echo 无效的编号。 exit 1 fi else interface$choice if ! ip link show $interface /dev/null; then echo 网卡 $interface 不存在。 exit 1 fi fi echo 已选择网卡: $interface # 获取 NetworkManager 连接名 conn_name$(nmcli -t -f NAME,DEVICE con show | grep :${interface}$ | cut -d: -f1 | head -n1) if [ -z $conn_name ]; then echo 该网卡没有现有连接将创建新连接名称: $interface conn_name$interface fi # 选择 IP 获取方式 echo echo 请选择 IP 配置方式: echo 1) DHCP (自动获取) echo 2) 静态 IP (手动输入) read -p 请输入 1 或 2: method case $method in 1) echo 正在应用 DHCP 配置... nmcli con mod $conn_name ipv4.method auto nmcli con up $conn_name ;; 2) echo echo 请输入以下信息 (按顺序): read -p 1) IP地址/掩码 (例如 192.168.1.100/24): ip_mask read -p 2) 网关地址 (例如 192.168.1.1): gateway read -p 3) DNS 服务器 (多个用空格分隔, 例如 8.8.8.8 8.8.4.4): dns if ! [[ $ip_mask ~ ^[0-9]\.[0-9]\.[0-9]\.[0-9]/[0-9]$ ]]; then echo 注意: IP/掩码格式建议为 x.x.x.x/掩码 (例如 192.168.1.100/24) fi if ! [[ $gateway ~ ^[0-9]\.[0-9]\.[0-9]\.[0-9]$ ]]; then echo 注意: 网关格式建议为 x.x.x.x fi echo 正在应用静态 IP 配置... nmcli con mod $conn_name ipv4.method manual \ ipv4.addresses $ip_mask \ ipv4.gateway $gateway \ ipv4.dns $dns nmcli con up $conn_name ;; *) echo 无效输入请输入 1 或 2。 exit 1 ;; esac # 重启网卡生效 echo 正在重启网卡 $interface 使配置生效... if nmcli device reapply $interface 2/dev/null; then echo 网卡配置已重新应用。 else echo reapply 失败尝试断开并重新连接... nmcli device disconnect $interface sleep 1 nmcli device connect $interface fi ip link set $interface up echo 网卡重启完成。 # 显示最终配置结果 echo echo 配置已应用并重启网卡生效 echo 网卡: $interface echo 当前 IPv4 信息: nmcli device show $interface 2/dev/null | grep -E IP4\.ADDRESS|IP4\.GATEWAY|IP4\.DNS | sed s/^/ / echo 3️⃣ 赋予执行权限并运行chmod x network_config.sh sudo ./network_config.sh 脚本核心逻辑解析步骤实现技术点防呆设计检测$EUID是否为0确保脚本以root运行网卡探测ip -br link showgrep -v LOOPBACK排除lomapfile存到数组表格美化printf固定列宽通过ip命令分别提取MAC、IPv4、状态灵活选择支持输入编号或直接输网卡名正则判断纯数字NetworkManager集成用nmcli -t -f NAME,DEVICE查找连接没有则自动创建同名校验静态参数校验简单正则检查IP/掩码和网关格式避免低级输入错误优雅重启优先nmcli device reapply失败后disconnect connect保底结果验证用nmcli device show过滤IP4相关信息直观展示 常见问题1脚本提示“未找到 nmcli 命令”怎么办→ 安装NetworkManagersudo apt install network-manager(Debian/Ubuntu)sudo yum install NetworkManager(CentOS/RHEL)2为什么我选了静态IP但重启后没生效→ 检查IP/掩码格式是否正确例如192.168.1.50/24。掩码不要漏掉/24这种前缀。→ 也可以手动检查nmcli con show $conn_name查看配置是否写入成功。3脚本会覆盖我原来的网络配置吗→ 脚本基于NetworkManager的连接配置文件操作。如果你之前手动改了/etc/network/interfaces而未纳入NM管理可能会导致冲突。建议使用此脚本时统一用NetworkManager管理网络。4无线网卡wlan0也支持吗→ 完全支持。但注意无线网卡通常需要先连接SSID本脚本只负责IP配置不处理WiFi认证。可以先手动连接好WiFi再用脚本改IP。 拓展建议加入备份功能修改前用nmcli con show $conn_name /tmp/network_backup_$(date %Y%m%d)导出配置。支持IPv6在静态IP部分增加ipv6.addresses和ipv6.gateway的交互。配置文件持久化将用户输入保存到/etc/network_config.conf下次运行可直接读取实现“一键恢复”。 结语这个脚本在我管理的几十台服务器上已经跑过很多次了零配置失误。它把nmcli冗长的参数变成了傻瓜式问答特别适合运维新手和频繁重装环境的老司机。如果你也有“记不住nmcli参数”的烦恼赶紧试试这个脚本吧顺手点个收藏下次配IP直接复制粘贴 脚本完全开源欢迎按需魔改。如果你有更好的想法评论区一起交流

相关新闻