Files
2026-06-07 23:26:27 +08:00

91 lines
1.9 KiB
Bash

#!/bin/bash
red(){
echo -e "\033[31m$1\033[0m"
}
green(){
echo -e "\033[32m$1\033[0m"
}
# 动态安装软件包
install_package() {
local PACKAGE_NAME=$1
if command -v "$PACKAGE_NAME" &> /dev/null; then
echo "$PACKAGE_NAME 已安装, 跳过."
return 0
fi
echo "安装 $PACKAGE_NAME..."
sleep 1
local PACKAGE_MANAGER
PACKAGE_MANAGER=$(get_package_manager)
if [ "$PACKAGE_MANAGER" == "apt-get" ]; then
sudo apt-get update
sudo apt-get install -y "$PACKAGE_NAME"
elif [ "$PACKAGE_MANAGER" == "yum" ]; then
sudo yum install -y "$PACKAGE_NAME"
else
echo "未知的包管理器, 请手动安装 $PACKAGE_NAME."
return 1
fi
}
# 获取系统包管理器
get_package_manager(){
if command -v apt-get &> /dev/null; then
echo "apt-get"
elif command -v yum &> /dev/null; then
echo "yum"
else
echo "未知的系统包管理器"
return 1 # 返回错误状态码
fi
}
# 检查 jq 是否已安装
check_jq() {
if command -v jq >/dev/null 2>&1; then
return 0
else
echo "jq 未安装"
return 1
fi
}
# URL编码
url_encode() {
local STR="$1"
local ENCODED=""
local I CHAR HEX
for ((I = 0; I < ${#STR}; I++)); do
CHAR="${STR:$I:1}"
case "$CHAR" in
[a-zA-Z0-9.~_-]) ENCODED+="$CHAR" ;;
*)
printf -v HEX '%02X' "'$CHAR"
ENCODED+="%$HEX"
;;
esac
done
echo "$ENCODED"
}
# 展示当前值并询问用户新输入的值
# 用法: ask_update "提示语" "当前值(当前配置文件的值)"
# 示例:
# NEW_PORT=$(ask_update "请输入新的端口号" "$(jq -r '.inbounds[0].port' $CONFIG_DIR/config.json)")
ask_update() {
local PROMPT="$1" # 提示语
local CURRENT_VALUE="$2"
local INPUT
read -p "${PROMPT} [当前: ${CURRENT_VALUE}]: " INPUT
# 用户直接回车则保留当前值,否则使用新输入
echo "${INPUT:-$CURRENT_VALUE}"
}