Toolbox/env_zh.sh
2025-04-25 16:26:06 +08:00

158 lines
5.6 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 步骤0: 检测操作系统
OS_ID=""
if [ -f /etc/os-release ]; then
source /etc/os-release # 加载 OS 变量
OS_ID=$ID
fi
echo "检测到的操作系统: $OS_ID"
# 步骤1: 更新系统(根据 OS 使用不同的包管理器)
echo "步骤1: 更新系统..."
if [[ "$OS_ID" == "ubuntu" || "$OS_ID" == "debian" ]]; then
sudo apt update && sudo apt upgrade -y
elif [[ "$OS_ID" == "centos" || "$OS_ID" == "rhel" ]]; then
if command -v dnf &> /dev/null; then # CentOS 8+
sudo dnf update -y
elif command -v yum &> /dev/null; then # CentOS 7
sudo yum update -y
else
echo "错误: 未找到包管理器 (yum 或 dnf)。脚本无法继续。"
exit 1
fi
else
echo "错误: 不支持的操作系统 ($OS_ID)。仅支持 Ubuntu/Debian 和 CentOS/RHEL。"
exit 1
fi
if [ $? -ne 0 ]; then
echo "错误: 系统更新失败。请检查网络或权限。"
exit 1
fi
# 步骤1.5: 设置时区为东八区 (Asia/Shanghai)
echo "步骤1.5: 设置时区为东八区 (Asia/Shanghai)..."
if command -v timedatectl &> /dev/null; then # 检查 timedatectl 是否可用
sudo timedatectl set-timezone Asia/Shanghai
if [ $? -eq 0 ]; then
echo "成功: 时区已设置为 Asia/Shanghai。"
timedatectl # 显示当前时区以验证
else
echo "警告: 时区设置失败。请手动运行 'sudo timedatectl set-timezone Asia/Shanghai'。"
fi
else
echo "警告: timedatectl 命令不可用。时区设置跳过。请手动配置时区。"
fi
# 步骤2: 安装必要工具和包
echo "步骤2: 安装中文相关包..."
if [[ "$OS_ID" == "ubuntu" || "$OS_ID" == "debian" ]]; then
sudo apt install -y locales fonts-wqy-zenhei manpages-zh # 移除 language-pack-zh-hans
if [ $? -ne 0 ]; then
echo "警告: 某些包安装失败 (如 language-pack-zh-hans 不可用)。将继续执行其他步骤。"
fi
elif [[ "$OS_ID" == "centos" || "$OS_ID" == "rhel" ]]; then
# 先安装 EPEL 仓库
if command -v dnf &> /dev/null; then
sudo dnf install -y epel-release
sudo dnf install -y glibc-common wqy-zenhei-fonts
elif command -v yum &> /dev/null; then
sudo yum install -y epel-release
sudo yum install -y glibc-common wqy-zenhei-fonts
fi
if [ $? -ne 0 ]; then
echo "错误: EPEL 或包安装失败。请手动检查。"
exit 1 # CentOS 分支保持严格
fi
fi
# 步骤2.5: 检测并安装 Vim并修复中文乱码
echo "步骤2.5: 检测并安装 Vim并修复中文乱码..."
if ! command -v vim &> /dev/null; then # 检查 Vim 是否已安装
echo "Vim 未安装,正在安装..."
if [[ "$OS_ID" == "ubuntu" || "$OS_ID" == "debian" ]]; then
sudo apt install -y vim
elif [[ "$OS_ID" == "centos" || "$OS_ID" == "rhel" ]]; then
if command -v dnf &> /dev/null; then
sudo dnf install -y vim
elif command -v yum &> /dev/null; then
sudo yum install -y vim
fi
fi
if [ $? -ne 0 ]; then
echo "警告: Vim 安装失败。请手动安装 (sudo apt/yum/dnf install vim)。"
else
echo "成功: Vim 已安装。"
fi
else
echo "Vim 已安装。"
fi
# 修复 Vim 中文乱码:修改 ~/.vimrc
if command -v vim &> /dev/null; then # 确保 Vim 已可用
VIMRC_FILE=~/.vimrc
if [ ! -f "$VIMRC_FILE" ]; then # 如果文件不存在,创建它
touch "$VIMRC_FILE"
echo "\" 新创建的 Vim 配置文件" > "$VIMRC_FILE"
fi
# 添加或更新配置
if grep -q "set encoding=utf-8" "$VIMRC_FILE"; then
echo "Vim 配置中已包含 encoding 设置。"
else
echo "set encoding=utf-8" >> "$VIMRC_FILE"
echo "set fileencodings=utf-8,ucs-bom,gbk,gb18030,gb2312,big5" >> "$VIMRC_FILE"
echo "成功: 已添加 Vim 中文支持配置。"
fi
if [ $? -ne 0 ]; then
echo "警告: Vim 配置修改失败。请手动编辑 ~/.vimrc。"
fi
else
echo "警告: Vim 不可用,无法修复中文乱码。"
fi
# 步骤3: 生成和配置 Locale
echo "步骤3: 生成中文 Locale..."
if [[ "$OS_ID" == "ubuntu" || "$OS_ID" == "debian" ]]; then
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8
elif [[ "$OS_ID" == "centos" || "$OS_ID" == "rhel" ]]; then
sudo localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
if [ $? -eq 0 ]; then
echo "export LANG=zh_CN.UTF-8" | sudo tee -a /etc/locale.conf
echo "export LC_ALL=zh_CN.UTF-8" | sudo tee -a /etc/locale.conf
else
echo "错误: Locale 生成失败。"
exit 1
fi
fi
if [ $? -ne 0 ]; then
echo "错误: 更新系统 Locale 失败。"
exit 1
fi
# 步骤4: 设置用户环境变量
echo "步骤4: 配置用户环境变量..."
echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=zh_CN.UTF-8' >> ~/.bashrc
source ~/.bashrc # 立即应用更改
if [ $? -ne 0 ]; then
echo "警告: 环境变量设置可能未完全生效。请重新登录 SSH。"
fi
# 步骤5: 验证配置
echo "步骤5: 验证中文语言环境、时区和 Vim 配置..."
locale # 显示当前 Locale 设置
timedatectl # 显示当前时区设置
if locale | grep -q "zh_CN.UTF-8"; then
echo "成功: 中文语言环境配置完成!"
else
echo "警告: 配置可能未完全成功。请检查输出并手动验证。"
fi
echo "提示: 请重新登录 SSH 会话以确保所有变化生效,包括时区和 Vim 设置。"
echo "脚本执行完毕。如果有问题,请查看系统日志 (e.g., sudo cat /var/log/syslog | grep locale 或 sudo cat /var/log/messages | grep vim)。"