amis/scripts/utils.sh

84 lines
1.9 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
render_option() {
for index in "${!choices[@]}"; do
if [ $index -eq $1 ]; then
printf "\033[31m> ${choices[$index]}\033[0m\n" # 高亮显示选中的选项
else
echo " ${choices[$index]}"
fi
done
}
clear_screen() {
local len=$1
echo "\033[${len}A\033[K"
for ((i=1;i<$len;i++)); do
echo "\033[K"
done
echo "\033[$((${len} + 1))A"
}
select_option() {
choices=("$@") # 将选项数组声明为全局变量
local selected=0 # 初始化选择索引
local choices_lenght=${#choices[@]} # 获取选项数组长度
render_option $selected
while true; do
read -n1 -s key # 读取单个按键并保持输入的隐私
case "$key" in
A) # 上箭头
if [ $selected -gt 0 ]; then
selected=$((selected - 1))
else
selected=$(($choices_lenght - 1))
fi
clear_screen $choices_lenght
render_option $selected
;;
B) # 下箭头
if [ $selected -lt $(($choices_lenght - 1)) ]; then
selected=$((selected + 1))
else
selected=0
fi
clear_screen $choices_lenght
render_option $selected
;;
"") # 回车键
break
;;
esac
done
# 打印最终结果日志
selected_option="${choices[$selected]}"
}
npm_version() {
local current_version=$1
local tag=$2
IFS='.-' read -r major minor patch pre_release pre_release_version <<< "$current_version"
if [ $tag = $pre_release ]; then
((pre_release_version++))
new_version="$major.$minor.$patch-$tag.$pre_release_version"
else
((patch++))
new_version="$major.$minor.$patch"
fi
echo "新版本为:$new_version"
}
npm_get_tag() {
IFS='.-' read -r major minor patch pre_release pre_release_version <<< "$1"
if [ "$pre_release" ]; then
npm_tag=$pre_release
else
npm_tag="latest"
fi
echo "发布tag为: $npm_tag"
}