Update env_zh.sh

This commit is contained in:
Lsmoisu 2025-04-25 15:55:36 +08:00 committed by GitHub
parent 9464306f9e
commit 6b7c55693a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

161
env_zh.sh
View File

@ -1,85 +1,100 @@
#!/bin/bash
# 脚本名称setup_locale_vim_chinese.sh
# 功能设置系统语言环境和Vim配置以解决中文乱码问题
# 适用系统Debian/Ubuntu, CentOS/RHEL
echo "开始设置系统语言环境和Vim配置以解决中文乱码问题..."
# 步骤0: 检测操作系统
OS_ID=""
if [ -f /etc/os-release ]; then
source /etc/os-release # 加载 OS 变量
OS_ID=$ID
fi
# 检测系统类型
SYSTEM_TYPE=""
if [ -f /etc/debian_version ]; then
SYSTEM_TYPE="debian"
echo "检测到的系统类型Debian/Ubuntu"
elif [ -f /etc/redhat-release ]; then
SYSTEM_TYPE="centos"
echo "检测到的系统类型CentOS/RHEL"
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 "不支持的系统类型此脚本仅适用于Debian/Ubuntu和CentOS/RHEL系统。"
echo "错误: 不支持的操作系统 ($OS_ID)。仅支持 Ubuntu/Debian 和 CentOS/RHEL。"
exit 1
fi
# 根据系统类型检查并安装语言包
echo "检查并安装语言包..."
if [ "$SYSTEM_TYPE" = "debian" ]; then
sudo apt update
sudo apt install -y locales
elif [ "$SYSTEM_TYPE" = "centos" ]; then
sudo yum install -y glibc-common
if [ $? -ne 0 ]; then
echo "错误: 系统更新失败。请检查网络或权限。"
exit 1
fi
# 生成zh_CN.UTF-8语言环境
echo "生成zh_CN.UTF-8语言环境..."
if [ "$SYSTEM_TYPE" = "debian" ]; then
if [ -f /etc/locale.gen ]; then
sudo sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen
else
sudo bash -c 'echo "zh_CN.UTF-8 UTF-8" > /etc/locale.gen'
# 步骤2: 安装必要工具和包
echo "步骤2: 安装中文相关包..."
if [[ "$OS_ID" == "ubuntu" || "$OS_ID" == "debian" ]]; then
sudo apt install -y locales language-pack-zh-hans fonts-wqy-zenhei manpages-zh
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 # manpages-zh 可能不可用,跳过
elif command -v yum &> /dev/null; then
sudo yum install -y epel-release
sudo yum install -y glibc-common wqy-zenhei-fonts # manpages-zh 可能不可用,跳过
fi
if [ $? -ne 0 ]; then
echo "错误: EPEL 或包安装失败。请手动检查。"
exit 1
fi
sudo locale-gen
elif [ "$SYSTEM_TYPE" = "centos" ]; then
sudo localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
fi
# 设置系统默认语言环境为zh_CN.UTF-8
echo "设置系统默认语言环境为zh_CN.UTF-8..."
if [ "$SYSTEM_TYPE" = "debian" ]; then
sudo bash -c 'echo "LANG=zh_CN.UTF-8" > /etc/default/locale'
sudo bash -c 'echo "LANGUAGE=zh_CN:zh" >> /etc/default/locale'
sudo bash -c 'echo "LC_CTYPE=zh_CN.UTF-8" >> /etc/default/locale'
elif [ "$SYSTEM_TYPE" = "centos" ]; then
sudo bash -c 'echo "LANG=zh_CN.UTF-8" > /etc/locale.conf'
sudo bash -c 'echo "LC_CTYPE=zh_CN.UTF-8" >> /etc/locale.conf'
if [ $? -ne 0 ]; then
echo "错误: 包安装失败。请手动检查包管理器错误日志。"
exit 1
fi
# 更新当前会话环境变量
echo "更新当前会话环境变量..."
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh
export LC_CTYPE=zh_CN.UTF-8
unset LC_ALL
# 设置系统时区为东八区 (Asia/Shanghai)
echo "设置系统时区为东八区 (Asia/Shanghai)..."
if [ "$SYSTEM_TYPE" = "debian" ]; then
sudo dpkg-reconfigure -f noninteractive tzdata
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo bash -c 'echo "Asia/Shanghai" > /etc/timezone'
elif [ "$SYSTEM_TYPE" = "centos" ]; then
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo bash -c 'echo "ZONE=Asia/Shanghai" > /etc/sysconfig/clock'
# 步骤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 # 生成 Locale
if [ $? -eq 0 ]; then
echo "export LANG=zh_CN.UTF-8" | sudo tee -a /etc/locale.conf # 设置系统级 Locale
echo "export LC_ALL=zh_CN.UTF-8" | sudo tee -a /etc/locale.conf
else
echo "错误: Locale 生成失败。"
exit 1
fi
fi
# 检查当前时区设置
echo "当前时区设置如下:"
date
if [ $? -ne 0 ]; then
echo "错误: 更新系统 Locale 失败。"
exit 1
fi
# 检查当前语言环境设置
echo "当前语言环境设置如下:"
locale
# 步骤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
# 检查语言环境是否可用
echo "检查可用语言环境列表:"
locale -a
# 步骤5: 验证配置
echo "步骤5: 验证中文语言环境..."
locale # 显示当前 Locale 设置
if locale | grep -q "zh_CN.UTF-8"; then
echo "成功: 中文语言环境配置完成!"
echo "提示: 请重新登录 SSH 会话以确保所有变化生效。"
else
echo "警告: 配置可能未完全成功。请检查输出并手动验证。"
fi
# 检查vim是否已安装
echo "检查vim是否已安装..."
@ -123,20 +138,4 @@ echo "测试中文显示 - Test Chinese Display" > "$TEST_FILE"
echo "请在vim中打开 $TEST_FILE 检查中文是否正常显示。"
echo "命令vim $TEST_FILE"
# 清理包管理缓存
echo "清理包管理缓存..."
if [ "$SYSTEM_TYPE" = "debian" ]; then
sudo apt autoremove -y
sudo apt autoclean
elif [ "$SYSTEM_TYPE" = "centos" ]; then
sudo yum autoremove -y
sudo yum clean all
fi
echo "脚本执行完成!"
echo "注意如果通过SSH连接请确保终端客户端如PuTTY、iTerm2字符编码设置为UTF-8。"
echo "如果中文仍显示乱码请重新登录shell或重启系统以应用语言环境更改。"
echo "如有问题,请提供以下信息:"
echo "1. locale 命令输出"
echo "2. vim $TEST_FILE 时中文是否乱码"
echo "3. 使用的终端类型本地或SSH客户端"
echo "脚本执行完毕。如果有问题,请查看系统日志 (e.g., sudo cat /var/log/messages | grep locale) 或运行 'locale' 命令。"