Files
xray_docker/bin/utils/base.sh
T

118 lines
3.1 KiB
Bash

#!/bin/bash
red(){
echo -e "\033[31m$1\033[0m"
}
green(){
echo -e "\033[32m$1\033[0m"
}
# 获取系统包管理器
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
}
# 动态安装软件包
install_package() {
local package_name=$1
if command -v "$package_name" &> /dev/null; then
echo "$package_name 已安装, 跳过."
return 0
fi
echo "安装 $package_name..."
local 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
}
check_config(){
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../" # 脚本文件夹绝对路径
local config_file="$script_dir/../conf/config.json"
# 如果配置文件不存在或者空白
if [ ! -e "$config_file" ] || [ ! -s "$config_file" ];then
echo "请先'创建配置'"
exit 1
fi
# 如果配置未初始化
local uuid=$(jq -r '.inbounds[0].settings.clients[0].id' "$config_file")
if [ "$uuid" = "你的UUID" ] || [ -z "$uuid" ]; then
echo "请先'创建配置'"
exit 1
fi
# 检查配置文件是否为有效的JSON格式
if ! jq '.' "$config_file" >/dev/null 2>&1; then
echo "配置文件不是有效的JSON格式, 请重新生成配置文件."
exit 1
fi
}
restart_docker() {
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../" # 脚本文件夹绝对路径
# 如果容器未运行,提示启动
local running_count=$(docker compose -f $script_dir/../docker-compose.yml ps -q | wc -l)
if [ "$running_count" -eq 0 ]; then
local choice
read -p "容器未启动,是否启动容器?(y/n): " choice
case "$choice" in
Y|y)
docker compose -f $script_dir/../docker-compose.yml up -d
return
;;
*)
echo "已取消启动"
return
;;
esac
fi
echo "正在重启容器..."
docker compose -f $script_dir/../docker-compose.yml down
docker compose -f $script_dir/../docker-compose.yml up -d
}
# 通用:展示当前值并询问新值
# 用法: 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}"
}