本文目录导读:

我来提供一个完整的网络环境切换脚本方案,包含Windows和Linux两个版本:
Windows 版本 (PowerShell)
# network-switch.ps1
# 一键切换网络环境脚本
param(
[Parameter(Mandatory=$true)]
[ValidateSet("办公", "家庭", "开发", "测试")]
[string]$Environment,
[switch]$ShowStatus
)
# 网络配置字典
$networkConfigs = @{
"办公" = @{
IP = "192.168.1.100"
Mask = "255.255.255.0"
Gateway = "192.168.1.1"
DNS1 = "114.114.114.114"
DNS2 = "8.8.8.8"
Proxy = $true
ProxyServer = "proxy.company.com:8080"
}
"家庭" = @{
IP = "192.168.0.100"
Mask = "255.255.255.0"
Gateway = "192.168.0.1"
DNS1 = "223.5.5.5"
DNS2 = "119.29.29.29"
Proxy = $false
}
"开发" = @{
IP = "10.0.0.100"
Mask = "255.255.255.0"
Gateway = "10.0.0.1"
DNS1 = "8.8.8.8"
DNS2 = "1.1.1.1"
Proxy = $false
}
"测试" = @{
DHCP = $true
Proxy = $false
}
}
# 获取网络适配器名称
function Get-NetworkAdapter {
$adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"}
if ($adapters.Count -eq 0) {
Write-Host "未找到活动网络适配器!" -ForegroundColor Red
exit 1
}
if ($adapters.Count -gt 1) {
Write-Host "找到多个活动网络适配器:" -ForegroundColor Yellow
for ($i = 0; $i -lt $adapters.Count; $i++) {
Write-Host "$i. $($adapters[$i].Name)"
}
$index = Read-Host "请输入适配器编号 [0-$($adapters.Count-1)]"
return $adapters[$index]
}
return $adapters[0]
}
# 设置静态IP
function Set-StaticIP {
param(
[string]$AdapterName,
[hashtable]$Config
)
Write-Host "设置静态IP..." -ForegroundColor Cyan
New-NetIPAddress -InterfaceAlias $AdapterName `
-IPAddress $Config.IP `
-PrefixLength 24 `
-DefaultGateway $Config.Gateway -ErrorAction SilentlyContinue
Set-DnsClientServerAddress -InterfaceAlias $AdapterName `
-ServerAddresses ($Config.DNS1, $Config.DNS2)
}
# 设置DHCP
function Set-DHCP {
param([string]$AdapterName)
Write-Host "切换到DHCP模式..." -ForegroundColor Cyan
Set-NetIPInterface -InterfaceAlias $AdapterName -Dhcp Enabled
Set-DnsClientServerAddress -InterfaceAlias $AdapterName -ResetServerAddresses
Remove-NetRoute -InterfaceAlias $AdapterName -ErrorAction SilentlyContinue
}
# 代理设置
function Set-Proxy {
param(
[bool]$Enable,
[string]$Server = ""
)
$registryPath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
if ($Enable) {
Set-ItemProperty -Path $registryPath -Name ProxyEnable -Value 1
Set-ItemProperty -Path $registryPath -Name ProxyServer -Value $Server
Write-Host "代理已启用: $Server" -ForegroundColor Green
} else {
Set-ItemProperty -Path $registryPath -Name ProxyEnable -Value 0
Write-Host "代理已禁用" -ForegroundColor Green
}
# 刷新系统代理设置
$internetSetting = New-Object -ComObject InternetExplorer.Application
$internetSetting.Visible = $false
$internetSetting.Quit()
}
# 显示当前状态
function Show-Status {
Write-Host "`n========== 当前网络状态 ==========" -ForegroundColor Cyan
Get-NetIPConfiguration | Format-Table InterfaceAlias, IPv4Address, IPv4DefaultGateway
Get-DnsClientServerAddress | Where-Object {$_.AddressFamily -eq 2} | Format-Table InterfaceAlias, ServerAddresses
$proxyStatus = Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Write-Host "代理状态: $($(if($proxyStatus.ProxyEnable) {"启用 - $($proxyStatus.ProxyServer)"} else {"禁用"}))"
}
# 主逻辑
Clear-Host
Write-Host "网络环境切换工具" -ForegroundColor Green
Write-Host "====================" -ForegroundColor Green
# 如果指定了显示状态
if ($ShowStatus) {
Show-Status
exit 0
}
# 获取网络适配器
$adapter = Get-NetworkAdapter
Write-Host "使用适配器: $($adapter.Name)" -ForegroundColor Yellow
# 获取配置
$config = $networkConfigs[$Environment]
# 应用网络配置
try {
if ($config.DHCP) {
Set-DHCP $adapter.Name
} else {
Set-StaticIP -AdapterName $adapter.Name -Config $config
}
# 设置代理
Set-Proxy -Enable $config.Proxy -Server $config.ProxyServer
Write-Host "`n成功切换到 [$Environment] 环境!" -ForegroundColor Green
# 测试网络连接
Start-Sleep -Seconds 3
$pingResult = Test-Connection -ComputerName 8.8.8.8 -Count 3
if ($pingResult) {
Write-Host "网络连接正常!" -ForegroundColor Green
} else {
Write-Host "警告: 网络连接可能存在问题!" -ForegroundColor Yellow
}
} catch {
Write-Host "切换失败: $($_.Exception.Message)" -ForegroundColor Red
}
# 显示最终状态
Show-Status
Linux 版本 (Bash)
#!/bin/bash
# network-switch.sh
# 一键切换网络环境脚本
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 网络配置
declare -A CONFIGS
CONFIGS[办公]="eth0|192.168.1.100|255.255.255.0|192.168.1.1|114.114.114.114,8.8.8.8|proxy.company.com:8080"
CONFIGS[家庭]="eth0|192.168.0.100|255.255.255.0|192.168.0.1|223.5.5.5,119.29.29.29|"
CONFIGS[开发]="wlan0|10.0.0.100|255.255.255.0|10.0.0.1|8.8.8.8,1.1.1.1|"
CONFIGS[DNS]="eth0|192.168.1.100|255.255.255.0|192.168.1.1|8.8.8.8,1.1.1.1|"
# 显示帮助
usage() {
echo "使用方法: $0 [环境名称]"
echo "可用环境: 办公, 家庭, 开发, DNS"
echo "示例: $0 办公"
}
# 检查root权限
check_root() {
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}请使用sudo运行此脚本${NC}"
exit 1
fi
}
# 备份网络配置
backup_config() {
INTERFACE=$1
echo -e "${BLUE}备份网络配置...${NC}"
cp /etc/network/interfaces /etc/network/interfaces.bak 2>/dev/null
cp /etc/resolv.conf /etc/resolv.conf.bak 2>/dev/null
}
# 设置DNS
set_dns() {
DNS_LIST=$1
echo -e "${BLUE}设置DNS服务器...${NC}"
# 检测系统类型
if [ -f /etc/resolvconf/resolv.conf.d/head ]; then
# Debian/Ubuntu
echo "# 由网络切换脚本生成" > /etc/resolvconf/resolv.conf.d/head
IFS=',' read -ra DNS_ARRAY <<< "$DNS_LIST"
for dns in "${DNS_ARRAY[@]}"; do
echo "nameserver $dns" >> /etc/resolvconf/resolv.conf.d/head
done
resolvconf -u
elif [ -f /etc/systemd/resolved.conf ]; then
# Systemd系统
IFS=',' read -ra DNS_ARRAY <<< "$DNS_LIST"
DNS_CONFIG=""
for dns in "${DNS_ARRAY[@]}"; do
DNS_CONFIG="$DNS_CONFIG $dns"
done
sed -i "s/#DNS=.*/DNS=$DNS_CONFIG/" /etc/systemd/resolved.conf
systemctl restart systemd-resolved
fi
# 兼容直接修改/etc/resolv.conf
echo "# 由网络切换脚本生成" > /etc/resolv.conf
IFS=',' read -ra DNS_ARRAY <<< "$DNS_LIST"
for dns in "${DNS_ARRAY[@]}"; do
echo "nameserver $dns" >> /etc/resolv.conf
done
}
# 设置静态IP
set_static_ip() {
INTERFACE=$1
IP=$2
MASK=$3
GATEWAY=$4
echo -e "${BLUE}设置静态IP: $IP...${NC}"
if [ -d /etc/network/interfaces.d ]; then
# Debian/Ubuntu风格
cat > /etc/network/interfaces.d/$INTERFACE << EOF
auto $INTERFACE
iface $INTERFACE inet static
address $IP
netmask $MASK
gateway $GATEWAY
EOF
elif [ -f /etc/sysconfig/network-scripts/ifcfg-$INTERFACE ]; then
# CentOS/RHEL风格
cat > /etc/sysconfig/network-scripts/ifcfg-$INTERFACE << EOF
DEVICE=$INTERFACE
BOOTPROTO=static
ONBOOT=yes
IPADDR=$IP
NETMASK=$MASK
GATEWAY=$GATEWAY
EOF
fi
# 立即生效
ip addr flush dev $INTERFACE
ip addr add $IP/$MASK dev $INTERFACE
ip route add default via $GATEWAY dev $INTERFACE
}
# 切换DHCP
set_dhcp() {
INTERFACE=$1
echo -e "${BLUE}切换到DHCP模式...${NC}"
if [ -d /etc/network/interfaces.d ]; then
cat > /etc/network/interfaces.d/$INTERFACE << EOF
auto $INTERFACE
iface $INTERFACE inet dhcp
EOF
elif [ -f /etc/sysconfig/network-scripts/ifcfg-$INTERFACE ]; then
sed -i 's/BOOTPROTO=.*/BOOTPROTO=dhcp/' /etc/sysconfig/network-scripts/ifcfg-$INTERFACE
fi
# 立即生效
dhclient -r $INTERFACE 2>/dev/null
dhclient $INTERFACE
}
# 设置代理
set_proxy() {
PROXY=$1
if [ -n "$PROXY" ]; then
export http_proxy="http://$PROXY"
export https_proxy="http://$PROXY"
export HTTP_PROXY="http://$PROXY"
export HTTPS_PROXY="http://$PROXY"
# 写入shell配置
echo "export http_proxy='http://$PROXY'" >> ~/.bashrc
echo "export https_proxy='http://$PROXY'" >> ~/.bashrc
echo -e "${GREEN}代理已启用: $PROXY${NC}"
else
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
sed -i '/http_proxy/d' ~/.bashrc
sed -i '/https_proxy/d' ~/.bashrc
echo -e "${GREEN}代理已禁用${NC}"
fi
}
# 测试网络
test_network() {
echo -e "${BLUE}测试网络连接...${NC}"
if ping -c 3 8.8.8.8 &> /dev/null; then
echo -e "${GREEN}网络连接正常✓${NC}"
return 0
else
echo -e "${RED}网络连接失败✗${NC}"
return 1
fi
}
# 显示状态
show_status() {
echo -e "\n${BLUE}========== 当前网络状态 ==========${NC}"
ip addr show
echo -e "\n${BLUE}路由表:${NC}"
ip route show
echo -e "\n${BLUE}DNS配置:${NC}"
cat /etc/resolv.conf
echo -e "\n${BLUE}代理状态:${NC}"
echo "HTTP_PROXY: ${http_proxy:-未设置}"
echo "HTTPS_PROXY: ${https_proxy:-未设置}"
}
# 主函数
main() {
# 检查root权限
check_root
# 没有参数时显示帮助
if [ $# -eq 0 ]; then
usage
exit 1
fi
ENV=$1
# 检查环境是否存在
if [ -z "${CONFIGS[$ENV]}" ]; then
echo -e "${RED}未知环境: $ENV${NC}"
usage
exit 1
fi
# 解析配置
IFS='|' read -ra CONFIG_PARTS <<< "${CONFIGS[$ENV]}"
INTERFACE=${CONFIG_PARTS[0]}
IP=${CONFIG_PARTS[1]}
MASK=${CONFIG_PARTS[2]}
GATEWAY=${CONFIG_PARTS[3]}
DNS_LIST=${CONFIG_PARTS[4]}
PROXY=${CONFIG_PARTS[5]:-""}
echo -e "\n${GREEN}切换到[$ENV]环境...${NC}\n"
# 备份当前配置
backup_config $INTERFACE
# 应用配置
if [ "$IP" = "dhcp" ]; then
set_dhcp $INTERFACE
elif [ -n "$IP" ]; then
set_static_ip $INTERFACE $IP $MASK $GATEWAY
fi
# 设置DNS
if [ -n "$DNS_LIST" ]; then
set_dns $DNS_LIST
fi
# 设置代理
set_proxy $PROXY
# 重启网络服务
echo -e "${BLUE}重启网络服务...${NC}"
systemctl restart networking 2>/dev/null || \
systemctl restart NetworkManager 2>/dev/null || \
service networking restart 2>/dev/null
# 测试网络
sleep 2
test_network
# 显示状态
show_status
echo -e "\n${GREEN}环境切换完成!${NC}"
}
# 运行主函数
main "$@"
使用说明
Windows 版使用方法:
- 以管理员身份运行 PowerShell
- 执行策略允许脚本:
Set-ExecutionPolicy RemoteSigned - 运行脚本:
.\network-switch.ps1 -Environment 办公 .\network-switch.ps1 -ShowStatus
Linux 版使用方法:
- 添加执行权限:
chmod +x network-switch.sh - 运行脚本:
sudo ./network-switch.sh 办公 sudo ./network-switch.sh -h
扩展功能建议
- 配置文件分离:将配置放在单独的JSON/YAML文件中
- 多网卡支持:允许选择特定网络接口
- VPN切换:集成VPN连接管理
- WiFi切换:支持无线网络连接管理
- 诊断工具:添加网络诊断功能
- 日志记录:记录切换历史
这个脚本可以根据你的具体需求进行定制修改,需要添加其他功能吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播