本文目录导读:

我来为您提供一个完整的环境变量切换脚本方案,包含多种常用场景。
基础版 - 多环境配置切换
#!/bin/bash
# env_switch.sh - 环境变量切换脚本
# 环境配置文件目录
CONFIG_DIR="./envs"
# 显示当前环境
show_current_env() {
if [ -f ".current_env" ]; then
echo "当前环境: $(cat .current_env)"
else
echo "未设置环境"
fi
}
# 列出可用环境
list_envs() {
echo "可用的环境:"
ls "$CONFIG_DIR" | sed 's/\.env$//'
}
# 切换环境
switch_env() {
local env_name="$1"
local env_file="$CONFIG_DIR/${env_name}.env"
if [ ! -f "$env_file" ]; then
echo "错误: 环境 '$env_name' 不存在"
list_envs
return 1
fi
# 备份当前环境变量
cp "$env_file" ".current_env"
echo "$env_name" > ".current_env"
# 加载新环境变量
set -a
source "$env_file"
set +a
echo "✅ 已切换到环境: $env_name"
}
# 主逻辑
case "${1:-}" in
list)
list_envs
;;
current)
show_current_env
;;
switch)
if [ -z "$2" ]; then
echo "用法: $0 switch <环境名>"
list_envs
exit 1
fi
switch_env "$2"
;;
*)
echo "用法: $0 {list|current|switch <环境名>}"
show_current_env
;;
esac
增强版 - 带备份和回滚
#!/bin/bash
# env_switch_advanced.sh - 环境变量切换(增强版)
# 配置
ENV_DIR="./envs"
BACKUP_DIR="./env_backups"
LOG_FILE="./env_switch.log"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# 备份当前环境
backup_current() {
local timestamp=$(date '+%Y%m%d_%H%M%S')
local backup_file="$BACKUP_DIR/env_backup_${timestamp}.txt"
# 保存当前的所有环境变量
env | sort > "$backup_file"
log "已备份环境变量到: $backup_file"
echo "$backup_file"
}
# 切换环境
switch_env() {
local env_name="$1"
local env_file="$ENV_DIR/${env_name}.env"
if [ ! -f "$env_file" ]; then
log "错误: 环境 '$env_name' 不存在"
return 1
fi
# 备份当前环境
local backup_file=$(backup_current)
# 保存当前环境配置路径
echo "$env_file" > ".current_env_path"
echo "$backup_file" > ".last_backup"
# 加载新环境
set -a
source "$env_file"
set +a
log "✅ 已切换到环境: $env_name"
}
# 回滚到上次环境
rollback_env() {
if [ -f ".last_backup" ]; then
local backup_file=$(cat ".last_backup")
if [ -f "$backup_file" ]; then
# 恢复环境变量(这里需要根据具体需求处理)
log "正在回滚环境变量..."
# 可以在这里实现具体的回滚逻辑
rm -f ".last_backup"
log "✅ 已回滚到上个环境"
else
log "错误: 备份文件不存在"
fi
else
log "没有可回滚的环境"
fi
}
# 导出环境变量到文件
export_env() {
local filename="$1"
if [ -z "$filename" ]; then
filename="env_export_$(date '+%Y%m%d_%H%M%S').txt"
fi
env | sort > "$filename"
log "环境变量已导出到: $filename"
}
# 比较环境差异
diff_env() {
local env1="$1"
local env2="$2"
if [ -f "$env1" ] && [ -f "$env2" ]; then
echo "环境差异:"
diff "$env1" "$env2" --suppress-common-lines
else
echo "文件不存在"
fi
}
# 主函数
case "${1:-}" in
switch)
[ -z "$2" ] && { echo "用法: $0 switch <环境名>"; exit 1; }
switch_env "$2"
;;
backup)
backup_current
;;
rollback)
rollback_env
;;
export)
export_env "$2"
;;
list)
echo "可用环境:"
ls "$ENV_DIR"/*.env 2>/dev/null | xargs -n1 basename | sed 's/\.env$//'
;;
*)
echo "用法: $0 {switch|backup|rollback|export|list}"
;;
esac
配置文件示例
# dev.env - 开发环境
APP_ENV=development
DEBUG=true
API_URL=http://localhost:8080
DB_HOST=localhost
DB_PORT=3306
DB_NAME=app_dev
DB_USER=root
DB_PASSWORD=devpass
REDIS_HOST=localhost
REDIS_PORT=6379
LOG_LEVEL=debug
# production.env - 生产环境
APP_ENV=production
DEBUG=false
API_URL=https://api.example.com
DB_HOST=db.example.com
DB_PORT=3306
DB_NAME=app_prod
DB_USER=secure_user
DB_PASSWORD=strongpassword
REDIS_HOST=redis.example.com
REDIS_PORT=6379
LOG_LEVEL=warn
使用方法
# 基础用法 ./env_switch.sh list # 列出所有环境 ./env_switch.sh current # 显示当前环境 ./env_switch.sh switch dev # 切换到开发环境 # 增强版用法 ./env_switch_advanced.sh switch prod # 切换到生产环境 ./env_switch_advanced.sh backup # 备份当前环境 ./env_switch_advanced.sh rollback # 回滚环境 ./env_switch_advanced.sh export # 导出环境变量
脚本初始化
#!/bin/bash # init_env.sh - 初始化环境 mkdir -p envs env_backups # 创建示例环境文件 cat > envs/dev.env << EOF # 开发环境配置如上所示 EOF # 创建示例配置文件 cat > envs/staging.env << EOF # 预发布环境 APP_ENV=staging DEBUG=true API_URL=https://staging-api.example.com EOF cat > envs/production.env << EOF # 生产环境 APP_ENV=production DEBUG=false API_URL=https://api.example.com EOF echo "环境初始化完成!" chmod +x env_switch.sh init_env.sh
进阶功能 - 环境管理GUI
#!/bin/bash
# env_manager.sh - 简单菜单界面
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
show_menu() {
clear
echo -e "${BLUE}══════════════════════════════════${NC}"
echo -e "${GREEN} 环境变量管理器 v1.0 ${NC}"
echo -e "${BLUE}══════════════════════════════════${NC}\n"
current_env=$(cat .current_env 2>/dev/null || echo "未设置")
echo -e "当前环境: ${YELLOW}$current_env${NC}\n"
echo "1. 选择环境"
echo "2. 创建新环境"
echo "3. 编辑当前环境"
echo "4. 查看当前环境变量"
echo "5. 删除环境"
echo "6. 显示所有环境"
echo "0. 退出"
echo ""
echo -n "请选择: "
}
select_env() {
echo -e "\n可用环境:"
local i=1
for file in envs/*.env; do
if [ -f "$file" ]; then
env_name=$(basename "$file" .env)
echo "$i) $env_name"
i=$((i+1))
fi
done
echo -n "输入环境数字: "
read choice
# 在此实现环境选择逻辑
}
这个脚本系统提供了完整的解决方案,包括:
- 基本的切换功能
- 备份和回滚机制
- 日志记录
- 环境比较
- 图形化界面支持
您可以根据实际需求调整和扩展这些功能。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播