[更新] 优化 定制/龙架构/loongjet.sh 模块的新旧世界识别模块

This commit is contained in:
xunmi-pc 2024-04-03 09:46:39 +08:00
commit f704cae1a0
3 changed files with 85 additions and 58 deletions

View File

@ -26,10 +26,11 @@ readonly 色彩=(
) )
# 用于规范输出的工具 # 用于规范输出的工具
# 位置参数 1 -> 整数 <- 1: 成功(亮绿); 2: 失败(暗红); 3: 信息(绿色); 4: 通知(黄色); 5: 异常(紫色) # 例: `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"`
# 位置参数 2 -> 字符 <- 在命令行输出的字符串 # *-* 一 -> 整数 <- 1: 成功(亮绿); 2: 失败(暗红); 3: 信息(绿色); 4: 通知(黄色); 5: 异常(紫色)
# 实例 `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"` # *-* 二 -> 字符 <- 在命令行输出的字符串
输出() { 输出() {
echo -n "($(date +"%Y-%m-%d %H:%M:%S"))"
if (($1 == 0)); then if (($1 == 0)); then
echo -e "${色彩[2]}[${色彩重置}${色彩[1]} 成功 ${色彩重置}${色彩[2]}]${色彩重置} $2" echo -e "${色彩[2]}[${色彩重置}${色彩[1]} 成功 ${色彩重置}${色彩[2]}]${色彩重置} $2"
elif (($1 == 1)); then elif (($1 == 1)); then
@ -60,7 +61,7 @@ readonly 色彩=(
############################################################################### ###############################################################################
# 更具用户输入判断是否需要继续 # 更具用户输入判断是否需要继续
# *-* 位置参数 1 -> 字符 <- 用于提示用户选择时候的提示语 # *-* -> 字符 <- 用于提示用户选择时候的提示语
# -*- 返回值: 如果 输入`是/Y/y/yes` 返会0, 其他情况返会1 # -*- 返回值: 如果 输入`是/Y/y/yes` 返会0, 其他情况返会1
是否() { 是否() {
输出 3 "$1((是/否 Yes/No))" 输出 3 "$1((是/否 Yes/No))"
@ -72,56 +73,58 @@ readonly 色彩=(
} }
# 用于判断两个版本号之间的大小 # 用于判断两个版本号之间的大小
# 格式实例:1.0.0, v8.8, go1.20.8 # 备注: 版本格式实例 1.0.0, v8.8, go1.20.8
# *-* 位置参数 1 -> 版本1 <- 第一个版本号 # 例: `版本对比 "$1" "$2" && echo "1: $1" || echo "2: $2"`
# *-* 位置参数 2 -> 版本2 <- 第二个版本号 # *-* 一 -> 字符(版本1) <- 建议为本地版本
# -*- 如果 版本1 >= 版本2 则返会0, 否者返会1 # *-* 二 -> 字符(版本2) <- 建议为需要对比的版本
# 使用实例: 版本对比 "$1" "$2" && echo "1: $1" || echo "2: $2" # -*- 返回值: 如果 版本1 >= 版本2 则返会1, 否者返会0, 根据建议填写参数效果则是本地如果是最新版则不会进入if判断
版本对比() { 版本对比() {
# 判断版本是否为空
if [ -z "${1// }" ]; then
return 0
elif [ -z "${2// }" ]; then
return 1
fi
# 使用IFS分割版本号为数组 # 使用IFS分割版本号为数组
IFS='.' read -r -A 版本数组A <<< ${1//[^0-9.]/} IFS='.' read -r -A 版本数组A <<< ${1//[^0-9.]/}
IFS='.' read -r -A 版本数组B <<< ${2//[^0-9.]/} IFS='.' read -r -A 版本数组B <<< ${2//[^0-9.]/}
# 逐段比较各个部分的大小 # 逐段比较各个部分的大小
for ((i=1; i <= ${#版本数组A[@]}; i++)); do for ((i=1; i <= ${#版本数组A[@]}; i++)); do
if (( ${版本数组A[i]} > ${版本数组B[i]} )); then if (( ${版本数组A[i]} > ${版本数组B[i]} )); then
return 0
elif (( ${版本数组A[i]} < ${版本数组B[i]} )); then
return 1 return 1
elif (( ${版本数组A[i]} < ${版本数组B[i]} )); then
return 0
fi fi
done done
# 如果循环结束仍未返回,则认为两个版本号相等 # 如果循环结束仍未返回,则认为两个版本号相等
return 0 return 1
} }
# 自动根据文件后缀选择响应的解压工具进行就地解压
# *-* 一 -> 字符(文件名) <- 压缩文件
解压(){ 解压(){
文件名=$1 文件名=$1
后缀="${文件名##*.}" 后缀="${文件名##*.}"
if [[ ${文件名} == *".tar."* ]]; then
后缀="tar.${后缀}"
fi
# 根据后缀选择解压命令 # 根据后缀选择解压命令
case ${后缀} in case ${后缀} in
"tar.gz" | "tgz") "tar.gz" | "tgz") tar -xzvf ${文件名} ;;
tar -xzvf ${文件名} "tar.xz") tar -xJvf ${文件名} ;;
;; "tar.bz2" | "tbz2") tar -xjvf ${文件名} ;;
"tar.xz") "zip") unzip ${文件名} ;;
tar -xJvf ${文件名} "rar") unrar x ${文件名} ;;
;; "7z") 7z x ${文件名} ;;
"tar.bz2" | "tbz2") *) 输出 5 "不支持的压缩格式" ;;
tar -xjvf ${文件名}
;;
"zip")
unzip ${文件名}
;;
"rar")
unrar x ${文件名}
;;
"7z")
7z x ${文件名}
;;
*)
echo "不支持的压缩格式"
return 1
;;
esac esac
} }
# 自动获取并且解压压缩包
# *-* 一 -> 字符(网址) <- 在线获取压缩包的地址
获解(){
wget -t 3 --content-disposition -q --show-progress -c $1 || 输出 5 "无法下载程序包"
包名="$(ls -t | head -n1)"
输出 2 "已获取${包名}"
解压 ${包名}
}

View File

@ -1,9 +1,8 @@
#!/usr/bin/zsh #!/usr/bin/zsh
##################################### #####################################
# 用于快速配置旧世界的开发环境 # # 自动配置常用开发环境 #
# 支持的语言: # # [x] go #
# [ ] go #
# [ ] rust # # [ ] rust #
# [ ] java # # [ ] java #
# [ ] nodejs # # [ ] nodejs #
@ -16,6 +15,14 @@
# 变量 # # 变量 #
############################################################################# #############################################################################
# 加载基础环境
source $HOME/.config/xunmi/信息
# source $HOME/x/公共/函数.zsh
source ${言灵一路径}/x/公共/函数.zsh
路径一开发环境="${言灵一路径}/ide"
mkdir -p ${路径一开发环境}
# 配置全局变量
local 旧世界一下载地址="http://ftp.loongnix.cn" local 旧世界一下载地址="http://ftp.loongnix.cn"
typeset -A 语言一GO=( typeset -A 语言一GO=(
@ -29,27 +36,37 @@ typeset -A 语言一GO=(
# 函数(func) # # 函数(func) #
############################################################################# #############################################################################
# latest_version=$(curl -s https://golang.google.cn/dl/ | grep -o 'go1.*linux-.*\.tar\.gz' | head -n 1)
开发环境一检测一GO(){ 开发环境一检测一GO(){
输出 0 "2: ${言灵一函数}"
# 检测安装情况 # 检测安装情况
unset 下载地址 unset 下载地址
# 获取在线版本
版本一在线=$(curl -s ${语言一GO[下载地址]} | grep -o $(echo "${语言一GO[版本正则]}" | sed "s/架构/${言灵一系统架构}/g") | head -n 1) 版本一在线=$(curl -s ${语言一GO[下载地址]} | grep -o $(echo "${语言一GO[版本正则]}" | sed "s/架构/${言灵一系统架构}/g") | head -n 1)
语言一GO[下载地址]="${语言一GO[下载地址]}${版本一在线}"
if [[ ${系统一世界类型} == "旧世界" ]]; then if [[ ${系统一世界类型} == "旧世界" ]]; then
echo "旧世界?" 输出 4 "[GO检测]旧世界支持开发兼容性较差,建议尽快迁移进入龙芯新世界!"
版本一在线=${语言一GO[旧世界版本]} 版本一在线=${语言一GO[旧世界版本]}
下载地址="${旧世界一下载地址}/toolchain/golang/${版本一在线%.*}/abi1.0/${版本一在线}.linux-loong64.tar.gz" 语言一GO[下载地址]="${旧世界一下载地址}/toolchain/golang/${版本一在线%.*}/abi1.0/${版本一在线}.linux-loong64.tar.gz"
fi fi
输出 0 "版本: ${版本一在线}" 输出 2 "[GO检测]在线版本: ${版本一在线%.linux*}"
if 版本对比 ${版本一主机} ${版本一在线}; then # 对比本地版本
版本一主机=$(go version) | awk '{print $3}' if [ -x "$(command -v go)" ]; then
版本一本地="$(echo $(go version) | awk '{print $3}')"
# 判断版本新旧
输出 2 "[GO检测]本地版本: ${版本一本地}"
if 版本对比 "${版本一本地}" "${版本一在线%.linux*}"; then
输出 2 "[GO检测]发现新版本GO"
return 1
fi
输出 2 "[GO检测]已是最新的GO版本"
return 0
fi fi
输出 2 "[GO检测]未检测到GO语言的本地版本"
return 1
} }
# 用于检测当前版本是否最新 # 用于检测当前版本是否最新
# 备注: 所有`开发环境一检测一*`返回0则代表无需更新,返回1则代表需要更新
# *-* -> 位置参数1 <- 需要检测的编程语言 # *-* -> 位置参数1 <- 需要检测的编程语言
# -*- -> 返回值 <- 如果 本地版本 >= 在线版本 返会 空, 反之这会返回最新的在线版本下载地址
开发环境一检测(){ 开发环境一检测(){
} }
@ -64,11 +81,21 @@ typeset -A 语言一GO=(
系统一主机架构=${言灵一系统一主机架构} 系统一主机架构=${言灵一系统一主机架构}
} }
开发环境一安装一go(){ 开发环境一部署一GO(){
# 换源 go env -w GOPROXY=https://goproxy.cn 输出 2 "开始从 ${语言一GO[下载地址]} 下载部署最新版go语言"
cd ${路径一开发环境}
获解 ${语言一GO[下载地址]}
echo "# [觅库]GO语言环境变量-1" >> $HOME/.zshrc
echo "export PATH=${路径一开发环境}/go/bin:\$PATH" >> $HOME/.zshrc
echo "export GOPATH=$HOME/.goenv" >> $HOME/.zshrc
source $HOME/.zshrc
go env -w GOPROXY=https://goproxy.cn
输出 0 "成功安装GO语言($(go version)), 并自动切换为国内GO语言下载源, 重启zsh生效!"
cd -
} }
开发环境一安装(){ 开发环境一部署(){
} }
@ -76,10 +103,7 @@ typeset -A 语言一GO=(
# 主函数(main) # # 主函数(main) #
############################################################################### ###############################################################################
source $HOME/.config/xunmi/信息
source ${言灵一路径}/x/公共/函数.zsh
开发环境一初始化 开发环境一初始化
开发环境一检测一GO 开发环境一检测一GO
# 开发环境一部署一GO

View File

@ -9,7 +9,7 @@ source /etc/os-release
# 脚本在执行过程中遇到任何非零返回码的命令时立即退出 # 脚本在执行过程中遇到任何非零返回码的命令时立即退出
# set -e # set -e
readonly 言灵一版本="v1.0.0" readonly 言灵一版本="v1.0.1"
############################################################################### ###############################################################################
# 全局变量 # # 全局变量 #
@ -230,7 +230,7 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
xmtop版本="v4.2.1" xmtop版本="v4.2.1"
输出 2 "开始下载 xmtop-${xmtop版本}-${世界一类型}" 输出 2 "开始下载 xmtop-${xmtop版本}-${世界一类型}"
xmtop_url="https://gitea.whlug.cn/xunmi/xmtop/releases/download/${xmtop版本}/xmtop_${世界一类型}" xmtop_url="https://gitea.whlug.cn/xunmi/xmtop/releases/download/${xmtop版本}/xmtop_${世界一类型}"
sudo wget -t 3 -q --show-progress -c ${xmtop_url} || 输出 5 "无法下载程序包" || return 301 sudo wget -t 3 -q --show-progress -c ${xmtop_url} || 输出 5 "无法下载程序包"
sudo mv -v xmtop_${世界一类型} /usr/bin/xmtop sudo mv -v xmtop_${世界一类型} /usr/bin/xmtop
sudo chmod 755 /usr/bin/xmtop sudo chmod 755 /usr/bin/xmtop
else else