98 lines
3.4 KiB
Bash
98 lines
3.4 KiB
Bash
#!/usr/bin/zsh
|
|
|
|
# 路径名称: 公共/函数.zsh
|
|
# 脚本作用: 通用zsh函数合集 方便zsh脚本快速调用
|
|
# 第一作者: 寻觅(xunmiemail@vip.qq.com)
|
|
# 创建时间: 2024年2月4日23:24:12
|
|
# 使用方法: 在言灵根目录下使用`. 公共/函数.zsh`
|
|
|
|
|
|
# 启动言灵公共函数模块的标识符
|
|
言灵一函数=1
|
|
|
|
###############################################################################
|
|
# 终端配色 #
|
|
###############################################################################
|
|
|
|
# 色彩配置
|
|
readonly 色彩重置='\e[0m'
|
|
readonly 色彩=(
|
|
'\e[92m' # 1: 亮绿
|
|
'\e[90m' # 2: 亮灰
|
|
'\e[31m' # 3: 暗红
|
|
'\e[32m' # 4: 暗绿
|
|
'\e[33m' # 5: 暗黄
|
|
'\e[95m' # 6: 亮紫
|
|
)
|
|
|
|
# 用于规范输出的工具
|
|
# 位置参数 1 -> 整数 <- 1: 成功(亮绿); 2: 失败(暗红); 3: 信息(绿色); 4: 通知(黄色); 5: 异常(紫色)
|
|
# 位置参数 2 -> 字符 <- 在命令行输出的字符串
|
|
# 实例 `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"`
|
|
输出() {
|
|
if (($1 == 0)); then
|
|
echo -e "${色彩[2]}[${色彩重置}${色彩[1]} 成功 ${色彩重置}${色彩[2]}]${色彩重置} $2"
|
|
elif (($1 == 1)); then
|
|
echo -e "${色彩[2]}[${色彩重置}${色彩[3]} 失败 ${色彩重置}${色彩[2]}]${色彩重置} $2"
|
|
exit 1
|
|
elif (($1 == 2)); then
|
|
echo -e "${色彩[2]}[${色彩重置}${色彩[4]} 信息 ${色彩重置}${色彩[2]}]${色彩重置} $2"
|
|
elif (($1 == 3)); then
|
|
echo -e "${色彩[2]}[${色彩重置}${色彩[5]} 通知 ${色彩重置}${色彩[2]}]${色彩重置} $2"
|
|
elif (($1 == 4)); then
|
|
echo -e "${色彩[2]}[${色彩重置}${色彩[6]} 异常 ${色彩重置}${色彩[2]}]${色彩重置} $2"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# 灰色信息(处理一些无关紧要的信息, 调用后在没有清除颜色之前会一直使用灰色输出)
|
|
色彩一灰色() {
|
|
echo -e "${色彩[2]}\c"
|
|
}
|
|
|
|
# 清除颜色(一般和灰色信息连用)
|
|
色彩一清除() {
|
|
echo -e "${色彩重置}\c"
|
|
}
|
|
|
|
###############################################################################
|
|
# 通用函数 #
|
|
###############################################################################
|
|
|
|
# 更具用户输入判断是否需要继续
|
|
# *-* 位置参数 1 -> 字符 <- 用于提示用户选择时候的提示语
|
|
# -*- 返回值: 如果 输入`是/Y/y/yes` 返会0, 其他情况返会1
|
|
是否() {
|
|
输出 3 "$1((是/否 Yes/No))"
|
|
read r
|
|
if echo "$r" | grep -Eq "^[是Yy][Ee]?[Ss]?$";then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
# 用于判断两个版本号之间的大小
|
|
# 格式实例:1.0.0, v8.8, go1.20.8
|
|
# *-* 位置参数 1 -> 版本1 <- 第一个版本号
|
|
# *-* 位置参数 2 -> 版本2 <- 第二个版本号
|
|
# -*- 如果 版本1 >= 版本2 则返会0, 否者返会1
|
|
# 使用实例: 版本对比 "$1" "$2" && echo "1: $1" || echo "2: $2"
|
|
版本对比() {
|
|
# 使用IFS分割版本号为数组
|
|
IFS='.' read -r -A 版本数组A <<< ${1//[^0-9.]/}
|
|
IFS='.' read -r -A 版本数组B <<< ${2//[^0-9.]/}
|
|
|
|
# 逐段比较各个部分的大小
|
|
for ((i=1; i <= ${#版本数组A[@]}; i++)); do
|
|
if (( ${版本数组A[i]} > ${版本数组B[i]} )); then
|
|
return 0
|
|
elif (( ${版本数组A[i]} < ${版本数组B[i]} )); then
|
|
return 1
|
|
fi
|
|
done
|
|
|
|
# 如果循环结束仍未返回,则认为两个版本号相等
|
|
return 0
|
|
}
|
|
|