重构代码, 将变量改为大写

This commit is contained in:
Olia Lisa
2026-05-21 16:57:44 +08:00
parent e166148e87
commit 4adb219b11
9 changed files with 130 additions and 130 deletions
+35 -35
View File
@@ -8,27 +8,27 @@
# $2: 结束端口(默认 65535)
# $3: 最大随机尝试次数(默认 100)
find_free_port() {
local start="${1:-10001}"
local max="${2:-65535}"
local attempts="${3:-100}"
local START="${1:-10001}"
local MAX="${2:-65535}"
local ATTEMPTS="${3:-100}"
# ------------------------------------------------------------
# 收集当前正在监听的端口(TCP + UDP)
# 优先使用 ss,其次 netstat
# ------------------------------------------------------------
local used_ports raw
local USED_PORTS RAW
if command -v ss >/dev/null 2>&1; then
# ss 输出示例:
# LISTEN 0 128 0.0.0.0:22
raw=$(ss -lntu 2>/dev/null || true)
used_ports=$(printf "%s\n" "$raw" \
RAW=$(ss -lntu 2>/dev/null || true)
USED_PORTS=$(printf "%s\n" "$RAW" \
| awk '{print $5}' \
| sed -E 's/.*[:]//g')
elif command -v netstat >/dev/null 2>&1; then
# netstat 输出示例:
# tcp 0 0 0.0.0.0:22
raw=$(netstat -lntu 2>/dev/null || true)
used_ports=$(printf "%s\n" "$raw" \
RAW=$(netstat -lntu 2>/dev/null || true)
USED_PORTS=$(printf "%s\n" "$RAW" \
| awk '{print $4}' \
| sed -E 's/.*[:]//g')
else
@@ -40,12 +40,12 @@ find_free_port() {
# 将已占用端口存入关联数组,便于 O(1) 判断
# 需要 bash 4+
# ------------------------------------------------------------
declare -A used_map
local p
for p in $used_ports; do
declare -A USED_MAP
local P
for P in $USED_PORTS; do
# 过滤非数字字段(如 *、:::
if [[ $p =~ ^[0-9]+$ ]]; then
used_map["$p"]=1
if [[ $P =~ ^[0-9]+$ ]]; then
USED_MAP["$P"]=1
fi
done
@@ -53,14 +53,14 @@ find_free_port() {
# 随机尝试若干次
# 每次随机生成一个端口,只要未被监听就立即返回
# ------------------------------------------------------------
local port i
for ((i=0; i<attempts; i++)); do
local PORT I
for ((I=0; I<ATTEMPTS; I++)); do
# 在 [start, max] 范围内生成随机端口
port=$(( RANDOM % (max - start + 1) + start ))
PORT=$(( RANDOM % (MAX - START + 1) + START ))
# 如果端口不在已监听表中,则认为可用
if [[ -z "${used_map[$port]}" ]]; then
echo "$port"
if [[ -z "${USED_MAP[$PORT]}" ]]; then
echo "$PORT"
return 0
fi
done
@@ -69,7 +69,7 @@ find_free_port() {
# 多次随机尝试后仍未找到可用端口
# 通常意味着端口范围过小或已被大量占用
# ------------------------------------------------------------
echo "Error: no free port found after $attempts random attempts." >&2
echo "Error: no free port found after $ATTEMPTS random attempts." >&2
return 1
}
@@ -172,34 +172,34 @@ port_manage() {
# update_port 8080
# ==========================================
update_port(){
local port=$1
local PORT=$1
# 如果没有提供端口参数,则自动查找一个随机空闲端口
if [[ -z "$port" ]]; then
port=$(find_free_port 5000 15000)
if [[ -z "$PORT" ]]; then
PORT=$(find_free_port 5000 15000)
fi
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
local config_dir="$script_dir/../config"
modify_json_file "$config_dir/config.json" ".inbounds[0].listen_port" "$port"
port_manage allow "$port"
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
local CONFIG_DIR="$SCRIPT_DIR/../config"
modify_json_file "$CONFIG_DIR/config.json" ".inbounds[0].listen_port" "$PORT"
port_manage allow "$PORT"
echo "设置端口成功"
}
# 通过交互方式更新端口
ask_update_port(){
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"
local current_port=$(get_listen_port)
local new_port=$(ask_update "请输入新的端口号" "$current_port")
update_port "$new_port"
local CURRENT_PORT=$(get_listen_port)
local NEW_PORT=$(ask_update "请输入新的端口号" "$CURRENT_PORT")
update_port "$NEW_PORT"
}
# 获取当前配置的监听端口
get_listen_port(){
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"
local port=$(jq -r ".inbounds[0].listen_port" "$config_file")
echo $port
local PORT=$(jq -r ".inbounds[0].listen_port" "$CONFIG_FILE")
echo $PORT
}