diff --git a/tool/install.sh b/tool/install.sh old mode 100644 new mode 100755 index a4e6107f..bacda481 --- a/tool/install.sh +++ b/tool/install.sh @@ -13,59 +13,120 @@ # --------------------------------------------------------------- install_dir="" +version="pre" path_to_executable="" default_install_path="/usr/local/bin" +noroot_default_install_path="$HOME/.local/bin" binary_name="chsrc" -version="" +temp_install_dir="" # 用于存储临时安装目录 +helpflag=0 +lan="zh" +# 输出相关信息 info() { echo "[INFO] $*" } +# 输出错误到stdout和stderr error() { echo -e "[ERROR] $*" >&2 exit 1 } +# 显示 chsrc 安装程序的帮助信息,包括使用说明和可用选项 help() { - echo "chsrc-installer: Install chsrc on any Unix-like OS and any architect " - echo - echo "使用: install.sh [options]" - echo "选项:" - echo "-h 打印此帮助信息" - echo "-d 指定安装目录,默认为 /usr/local/bin;若已安装,则覆盖旧版本" - echo "-v 指定chsrc版本" - echo + if [ "$lan" = "zh" ]; then + echo "chsrc-installer: 在任何类Unix操作系统上安装 chsrc" + echo + echo "使用: install.sh [选项]" + echo "选项:" + echo " -h 打印此帮助信息" + echo " -d 指定安装目录,默认为 /usr/local/bin;若已安装,则覆盖旧版本" + echo " -v 指定 chsrc 版本" + echo " -l 指定脚本语言,支持 zh 和 en " + echo + else + echo "chsrc-installer: Install chsrc on any Unix-like OS" + echo + echo "Usage: install.sh [options]" + echo "Options:" + echo " -h Print this help information" + echo " -d Specify installation directory, default is /usr/local/bin; will overwrite if already installed" + echo " -v Specify chsrc version" + echo " -l Specify script language, supports zh and en" + echo + fi } - +# 确定下载路径 set_install_path() { if [ -n "$install_dir" ]; then # 扩展 ~ 符号 install_dir="${install_dir/#\~/$HOME}" + + # 检查路径是否存在,如果不存在则创建该路径 + if [ ! -d "$install_dir" ]; then + # 多种语言输出 + if [ "$lan" = "zh" ]; then + echo "目录 $install_dir 不存在,正在创建..." + else + echo "Directory $install_dir does not exist. Creating..." + fi + # 多语言输出 + if ! mkdir -p "$install_dir"; then + if [ "$lan" = "zh" ]; then + echo "创建目录失败,请重试" + else + echo "Failed to create directory, please try again" + fi + exit 1 + fi + + temp_install_dir="$install_dir" # 记录临时安装目录 + fi + elif existing_path=$(command -v "$binary_name" 2>/dev/null); then - info "$binary_name 已安装,更新路径: ${existing_path}" + + if [ "$lan" = "zh"]; then + info "$binary_name 已安装,更新路径: ${existing_path}" + else + info "$binary_name is already installed, updating path: ${existing_path}" + fi + install_dir=$(dirname "$existing_path") else # 检查默认路径 if [ -d "$default_install_path" ] && [ -w "$default_install_path" ]; then install_dir="$default_install_path" + else if [ -d "$noroot_default_install_path" ] && [ -w "$noroot_default_install_path" ]; then + install_dir="$noroot_default_install_path" else - error "默认下载路径 /usr/local/bin 不可写,请使用 sudo 命令运行脚本;或通过 -d 参数指定其它路径安装" + if [ "$lan" = "zh"]; then + error "默认下载路径 /usr/local/bin 不可写,请使用 sudo 命令运行脚本;或通过 -d 参数指定其它路径安装" + else + error "Default download path /usr/local/bin is not writable. Please run the script with sudo; or specify another path using the -d option." + fi + fi fi } - +# 从Gitee仓库安装 指定架构,操作系统,版本 的chsrc二进制文件 install() { arch="$(uname -m | tr '[:upper:]' '[:lower:]')" case "$arch" in x86_64) arch="x64" ;; - aarch64) arch="aarch64" ;; + aarch64|arm64) arch="aarch64" ;; riscv64) arch="riscv64" ;; armv7*) arch="armv7" ;; - *) error "不支持的架构: ${arch}" ;; + *) + if [ "$lan" = "zh" ]; then + error "不支持的架构: ${arch}" + else + error "Unsupported architecture: ${arch}" + fi + ;; esac platform="$(uname -s | awk '{print tolower($0)}')" @@ -73,36 +134,74 @@ install() { case "$platform" in linux) platform="linux" ;; darwin) platform="macos" ;; - *) error "不支持的平台: ${platform}" ;; + *) + if [ "$lan" = "zh" ]; then + error "不支持的平台: ${platform}" + else + error "Unsupported platform: ${platform}" + fi + ;; esac - if [ -n "$version" ]; then - url="https://gitee.com/RubyMetric/chsrc/releases/download/v${version}/${binary_name}-${arch}-${platform}" - else - url="https://gitee.com/RubyMetric/chsrc/releases/download/pre/${binary_name}-${arch}-${platform}" - version="latest" + if [[ ! "$version" =~ ^(pre|0\.1\.([4-9]))$ ]]; then + # version 不符合条件,报错 + if [ "$lan" = "zh" ]; then + error "不支持的版本: ${version},版本号必须在 0.1.4 到 0.1.9 之间或为 'pre'" + else + error "Unsupported version: ${version}. Version number must be between 0.1.4 and 0.1.9 or 'pre'" + fi fi - path_to_executable="${install_dir}/${binary_name}" + url="https://gitee.com/RubyMetric/chsrc/releases/download/${version}/${binary_name}-${arch}-${platform}" - info "下载 ${binary_name} (${arch} 架构, ${platform} 平台) 到 ${path_to_executable}" + path_to_executable="${install_dir}/${binary_name}" + + if [ "$lan" = "zh" ]; then + info "下载 ${binary_name} (${arch} 架构, ${platform} 平台, ${version}版本) 到 ${path_to_executable}" + else + info "Downloading ${binary_name} (${arch} architecture, ${platform} platform, version ${version}) to ${path_to_executable}" + fi - # 下载文件并设置权限 if curl -sL "$url" -o "$path_to_executable"; then chmod +x "$path_to_executable" - info "🎉 安装完成,版本: $version,路径: $path_to_executable" + + if [ "$lan" = "zh" ]; then + info "🎉 安装完成,版本: $version,路径: $path_to_executable" + else + info "🎉 Installation completed, path: $path_to_executable" + fi + else - error "下载失败,请检查您的网络连接和代理设置: ${url}" + if [ "$lan" = "zh" ]; then + error "下载失败,请检查您的网络连接和代理设置: ${url}" + else + error "Download failed, please check your network connection and proxy settings: ${url}" + fi + + fi +} + +# 清理函数 +cleanup() { + if [ -n "$temp_install_dir" ] && [ -d "$temp_install_dir" ]; then + + if [ "$lan" = "zh" ]; then + echo "清理创建的目录: $temp_install_dir" + else + echo "Cleaning up created directory: $temp_install_dir" + fi + rm -rf "$temp_install_dir" fi } +# 设置 trap 以捕获退出信号 +trap cleanup EXIT -# main -while getopts ":hd:v:" option; do +# 从命令行读取 安装路径与版本号 +while getopts ":hd:v:l:" option; do case $option in h) - help - exit 0 + helpflag=1 ;; d) install_dir=${OPTARG} @@ -110,6 +209,9 @@ while getopts ":hd:v:" option; do v) version=${OPTARG} ;; + l) + lan=${OPTARG} + ;; \?) echo "无效的命令行选项,请使用 -h 查看帮助" exit 1 @@ -117,5 +219,15 @@ while getopts ":hd:v:" option; do esac done +# 判断语言的类型,不符合直接退出 +if [[ "$lan" != "zh" && "$lan" != "en" ]]; then + error "无效的语言选项: $lan。支持的选项是 zh 和 en" +fi + +if [ "$helpflag" -eq 1 ]; then + help + exit 0; +fi + set_install_path -install +install \ No newline at end of file diff --git a/tool/readme.txt b/tool/readme.txt new file mode 100644 index 00000000..518c25d9 --- /dev/null +++ b/tool/readme.txt @@ -0,0 +1,60 @@ +########################################################################### +# Chsrc 相关工具 +# 脚本工具 +########################################################################### + +************ +1. 概述 +************ + +此文件夹包含许多与安装 Chsrc 二进制文件相关的脚本工具,您可以使用这些工具指定目录路径和发布版本。 + +******** +2. 文件 +******** + +install.sh Bash 安装工具 +install.ps1 Powershell 安装工具。 +reademe.txt 此文件 + +******************* +3. 安装 +******************* + +步骤1:输入“sudo chmod u+x ./install.sh”以使脚本可执行。 + +步骤2:输入“./install.sh [-h] [-d ] [-v ] [-l ]”指定安装路径,发布版本和脚本语言。 + +步骤3:如果出现错误,请检查您的网络连接并确保您可以访问Gitee。 + + + +##################################################################### +# Chsrc realated tools +# Scripts Tools +# English Version +##################################################################### + +************ +1. Overview +************ + +This folder contains many script tools realated to install Chsrc binary file, +you can use the tools to specify directory path and release version. + +******** +2. Files +******** + +install.sh Bash install tool. +reademe.txt This file + +******************* +3. Install +******************* + +Step 1: Type "sudo chmod u+x ./install.sh" to make scrpit executable. + +Step 2: Type "./install.sh [-h] [-d ] [-v ] [-l ]" to specify install path and release version also language. + +Step 3: If an error occurs, please check your internet connection and ensure that you can access Gitee. \ No newline at end of file