diff --git a/bin/utils/base.sh b/bin/utils/base.sh index 41a1e60..5262933 100644 --- a/bin/utils/base.sh +++ b/bin/utils/base.sh @@ -11,22 +11,23 @@ green(){ # 动态安装软件包 install_package() { - local package_name=$1 - if command -v "$package_name" &> /dev/null; then - echo "$package_name 已安装, 跳过." + local PACKAGE_NAME=$1 + if command -v "$PACKAGE_NAME" &> /dev/null; then + echo "$PACKAGE_NAME 已安装, 跳过." return 0 fi - echo "安装 $package_name..." + echo "安装 $PACKAGE_NAME..." sleep 1 - package_manager=$(get_package_manager) - if [ "$package_manager" == "apt-get" ]; then + 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" + sudo apt-get install -y "$PACKAGE_NAME" + elif [ "$PACKAGE_MANAGER" == "yum" ]; then + sudo yum install -y "$PACKAGE_NAME" else - echo "未知的包管理器, 请手动安装 $package_name." + echo "未知的包管理器, 请手动安装 $PACKAGE_NAME." return 1 fi } @@ -55,47 +56,47 @@ check_jq() { # 生成密码 gen_password() { - local pass_length=$1 # 密码长度作为第一个参数 - local chars='[:alnum:]' # 只允许出现字母和数字 + local PASS_LENGTH=$1 # 密码长度作为第一个参数 + local CHARS='[:alnum:]' # 只允许出现字母和数字 - local rand - rand=$(< /dev/urandom tr -dc "$chars" | head -c "$pass_length") + local RAND + RAND=$(< /dev/urandom tr -dc "$CHARS" | head -c "$PASS_LENGTH") - echo "$rand" + echo "$RAND" } # URL编码 url_encode() { - local str="$1" - local encoded="" - local i char hex + 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" ;; + 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" + printf -v HEX '%02X' "'$CHAR" + ENCODED+="%$HEX" ;; esac done - echo "$encoded" + echo "$ENCODED" } # 检查tuic配置文件 check_config_file(){ - local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../" # 脚本文件夹绝对路径 - local config_file="$script_dir/../config/config.json" + local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../" # 脚本文件夹绝对路径 + local CONFIG_FILE="$SCRIPT_DIR/../config/config.json" # 检查配置文件是否存在 - if [ ! -e "$config_file" ]; then + if [ ! -e "$CONFIG_FILE" ]; then echo "配置文件不存在, 请先生成配置文件." exit 1 fi # 检查配置文件是否为有效的JSON格式 - if ! jq '.' "$config_file" >/dev/null 2>&1; then + if ! jq '.' "$CONFIG_FILE" >/dev/null 2>&1; then echo "配置文件不是有效的JSON格式, 请重新生成配置文件." exit 1 fi @@ -104,16 +105,16 @@ check_config_file(){ # 重启docker容器 restart_docker() { - local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../" # 脚本文件夹绝对路径 - local compose_file="$script_dir/../docker-compose.yml" + local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../" # 脚本文件夹绝对路径 + local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml" # 如果容器未运行,提示启动 - local running_count=$(docker compose -f $compose_file ps -q | wc -l) - if [ "$running_count" -eq 0 ]; then - read -p "容器未启动,是否启动容器?(y/n): " choice - case "$choice" in + local RUNNING_COUNT=$(docker compose -f $COMPOSE_FILE ps -q | wc -l) + if [ "$RUNNING_COUNT" -eq 0 ]; then + read -p "容器未启动,是否启动容器?(y/n): " CHOICE + case "$CHOICE" in Y|y) - docker compose -f $compose_file up -d + docker compose -f $COMPOSE_FILE up -d return ;; *) @@ -124,20 +125,20 @@ restart_docker() { fi echo "正在重启容器..." - docker compose -f $compose_file down - docker compose -f $compose_file up -d + docker compose -f $COMPOSE_FILE down + docker compose -f $COMPOSE_FILE up -d } # 展示当前值并询问用户新输入的值 # 用法: ask_update "提示语" "当前值(当前配置文件的值)" # 示例: -# new_port=$(ask_update "请输入新的端口号" "$(jq -r '.inbounds[0].port' $config_dir/config.json)") +# NEW_PORT=$(ask_update "请输入新的端口号" "$(jq -r '.inbounds[0].port' $CONFIG_DIR/config.json)") ask_update() { - local prompt="$1" # 提示语 - local current_value="$2" - local input + local PROMPT="$1" # 提示语 + local CURRENT_VALUE="$2" + local INPUT - read -p "${prompt} [当前: ${current_value}]: " input + read -p "${PROMPT} [当前: ${CURRENT_VALUE}]: " INPUT # 用户直接回车则保留当前值,否则使用新输入 - echo "${input:-$current_value}" + echo "${INPUT:-$CURRENT_VALUE}" } diff --git a/bin/utils/jq_util.sh b/bin/utils/jq_util.sh index 9a1842b..1cd7bb8 100644 --- a/bin/utils/jq_util.sh +++ b/bin/utils/jq_util.sh @@ -6,23 +6,23 @@ # 案例2:modify_json_file "/foo/bar.json" "servers" '["a.com", "b.com"]' # 该函数能自动处理不同数据类型,包括数组、对象和数字等。 function modify_json_file() { - local json_file=$1 # json文件路径 - local key=$2 # 要修改的key - local value=$3 # 要修改的value + local JSON_FILE=$1 # json文件路径 + local KEY=$2 # 要修改的key + local VALUE=$3 # 要修改的value #如果key的值是.开头, 则去掉.号 - if [[ ${key} == "."* ]]; then - key=${key:1} + if [[ ${KEY} == "."* ]]; then + KEY=${KEY:1} fi # 检查值是否为有效的 JSON 格式(如数组、对象或数字)。 # 如果是,则直接将值传递给 jq,无需引号。 - if echo "${value}" | jq . >/dev/null 2>&1; then - jq ".${key} = ${value}" "${json_file}" > "${json_file}.tmp" + if echo "${VALUE}" | jq . >/dev/null 2>&1; then + jq ".${KEY} = ${VALUE}" "${JSON_FILE}" > "${JSON_FILE}.tmp" else # 否则,将值视为字符串,并添加引号。 - jq ".${key} = \"${value}\"" "${json_file}" > "${json_file}.tmp" + jq ".${KEY} = \"${VALUE}\"" "${JSON_FILE}" > "${JSON_FILE}.tmp" fi - mv ${json_file}.tmp ${json_file} + mv ${JSON_FILE}.tmp ${JSON_FILE} }