#!/bin/bash
# 备份网络配置文件
backup_file="/etc/network-config-backup-$(date +"%Y%m%d%H%M%S")"
sudo cp /etc/network/interfaces $backup_file
# 获取系统中的所有网卡
interfaces=$(ifconfig -s | awk '{print $1}' | tail -n +2)
# 提示用户选择要配置的网卡
PS3="请选择要配置的网卡: "
select interface in $interfaces
do
if [ -n "$interface" ]; then
break
else
echo "无效的选择,请重新选择。"
fi
done
# 提示用户选择IP配置方式
PS3="请选择IP配置方式(1. 静态IP 2. 动态IP): "
select ip_mode in "静态IP" "动态IP"
do
case $ip_mode in
"静态IP")
# 输入验证函数 - 检查输入是否是合法的IP地址
validate_ip() {
local ip=$1
local stat=1
# 检查IP地址格式
if [[ $ip =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
stat=0
local IFS='.'
local ip_arr=($ip)
# 检查每个字段是否在合法范围
for octet in ${ip_arr[@]}; do
if [[ $octet -lt 0 || $octet -gt 255 ]]; then
stat=1
break
fi
done
fi
return $stat
}
# 获取新的静态IP地址
read -p "请输入新的静态IP地址: " ip_address
# 进行输入验证
validate_ip $ip_address
if [ $? -eq 0 ]; then
break
else
echo "无效的IP地址,请重新输入。"
fi
;;
"动态IP")
# 清除之前的静态IP配置
sudo dhclient -r $interface
break
;;
*)
echo "无效的选择,请重新选择。"
;;
esac
done
# 提示用户输入其他配置
if [ "$ip_mode" == "静态IP" ]; then
read -p "请输入新的子网掩码: " subnet_mask
read -p "请输入新的网关: " gateway
fi
# 输入验证函数 - 检查输入是否是合法的DNS服务器地址
validate_dns() {
local dns=$1
local stat=1
# 检查DNS服务器地址格式
if [[ $dns =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+( [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)*$ ]]; then
stat=0
fi
return $stat
}
# 提示用户输入DNS服务器地址
read -p "请输入新的DNS服务器地址(多个DNS服务器用空格分隔): " dns_servers
# 进行输入验证
validate_dns "$dns_servers"
if [ $? -ne 0 ]; then
echo "无效的DNS服务器地址,请重新输入。"
exit 1
fi
# 配置网卡信息
if [ "$ip_mode" == "静态IP" ]; then
sudo sed -i "/iface $interface/,+5 s/^/#/" /etc/network/interfaces # 注释掉之前的配置
echo -e "iface $interface inet static\naddress $ip_address\nnetmask $subnet_mask\ngateway $gateway" | sudo tee -a /etc/network/interfaces
sudo service networking restart
fi
# 配置DNS服务器
echo "nameserver $dns_servers" | sudo tee /etc/resolv.conf
# 显示修改后的网卡配置信息
echo -e "\n已成功修改 $interface 的配置信息:"
echo "IP地址: $ip_address"
echo "子网掩码: $subnet_mask"
echo "网关: $gateway"
echo "DNS服务器: $dns_servers"
shell脚本 修改网卡配置
于 2024-01-09 16:26:53 首次发布