Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix bash script bug and Add new Language Selection Feature #104

Merged
merged 14 commits into from
Oct 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
174 changes: 143 additions & 31 deletions tool/install.sh
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -13,109 +13,221 @@
# ---------------------------------------------------------------

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 <destination> 指定安装目录,默认为 /usr/local/bin;若已安装,则覆盖旧版本"
echo "-v <version> 指定chsrc版本"
echo
if [ "$lan" = "zh" ]; then
echo "chsrc-installer: 在任何类Unix操作系统上安装 chsrc"
echo
echo "使用: install.sh [选项]"
echo "选项:"
echo " -h 打印此帮助信息"
echo " -d <destination> 指定安装目录,默认为 /usr/local/bin;若已安装,则覆盖旧版本"
echo " -v <version> 指定 chsrc 版本"
echo " -l <language> 指定脚本语言,支持 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 <destination> Specify installation directory, default is /usr/local/bin; will overwrite if already installed"
echo " -v <version> Specify chsrc version"
echo " -l <language> 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)}')"

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}
;;
v)
version=${OPTARG}
;;
l)
lan=${OPTARG}
;;
\?)
echo "无效的命令行选项,请使用 -h 查看帮助"
exit 1
;;
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
60 changes: 60 additions & 0 deletions tool/readme.txt
Original file line number Diff line number Diff line change
@@ -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 <install_directory>] [-v <version>] [-l <language>]”指定安装路径,发布版本和脚本语言。

步骤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 <install_directory>] [-v <version>] [-l <language>]" 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.