Files
2026-05-19 11:30:21 +08:00

228 lines
4.4 KiB
Bash

#!/usr/bin/env bash
#-------------------------------------------------
# 工具包主脚本
# @author lwt
#-------------------------------------------------
# 检查是否在cygwin中
in_cygwin(){
local os=$(uname)
if [[ "${os:0:3}" == "CYG" ]]; then
echo "1"
else
echo "0"
fi
}
# 检查某个函数是否已经定义
is_fun_exists(){
declare -F "$1" > /dev/null; return $?
}
# 检查某个命令是否存在h
is_command_exists(){
command -v $1 >/dev/null; return $?
}
# 检查screen session是否存在
is_screen_exists(){
[[ $(screen -ls | grep "$1" | wc -l ) -gt 0 ]] ; return $?
}
# 是否整数
is_integer(){
local re='^[0-9]+$'
[[ $1 =~ $re ]]; return $?
}
# 检查数组中是否存在某个元素
# 参数1:数组
# 参数2: 元素
in_array(){
declare -a haystack=("${!1}")
local needle=${2}
for v in ${haystack[@]}; do
if [[ ${v} == ${needle} ]]; then
return 0
fi
done
return 1
}
# 检查当前运行环境中是否存在tty
has_tty(){
[[ -t 1 ]]; return $?
}
# 输出一条普通信息
INFO(){
echo -e "\e[92m=>\e[0;0m ${1}"
}
# 输出一条普通信息
FROMAT(){
echo -e "\e[92m \e[0;0m ${1}"
}
# 输出一条错误信息
ERR(){
>&2 echo -e "\e[91m>> ${1}\e[0;0m"
}
# 打印信息
OPT() {
echo -e "[操作] $(date '+%Y-%m-%d %H:%M:%S') $@"
}
CMD() {
echo -e "[指令] $(date '+%Y-%m-%d %H:%M:%S') $@"
}
# 检查锁
lock_check(){
local task=$1
lock=/tmp/server_lock_${task}.lock
if [ -f $lock ]; then
taskname=$(<$lock)
ERR "正在执行\"$taskname\"任务,需要等待该任务完成..."
ERR "如无任务执行,自行删除${lock}文件"
exit 1
fi
touch $lock # 加锁
echo $task > $lock
}
# 解锁
lock_release(){
local task=$1
lock=/tmp/server_lock_${task}.lock
rm -f $lock
}
# 调用函数
_CALL_FUNCTION(){
resolve_arg $@
if is_fun_exists ${FUN_NAME}; then
check_arg
${FUN_NAME} $ARGS
exit 0
fi
help
}
# 解析参数
resolve_arg(){
FUN_NAME="fun_${1}"
shift
while [ $# -ne 0 ] ; do
PARAM=$1
shift
case $PARAM in
--) break ;;
--server|-s) SERVER_TYPE=$1; shift ;;
--alias|-a) ALIAS=$1; shift ;;
--server_id|-si) SERVER_ID=$1; shift ;;
--db_host|-dbh) DB_HOST=$1; shift;;
*) ARGS="$ARGS $PARAM" ;;
esac
done
}
# 检测参数
check_arg(){
if [ "${ALIAS}" = "" ]; then
ALIAS=${DEF_ALIAS}
fi
if [ "${SERVER_TYPE}" = "" ]; then
SERVER_TYPE=${DEF_SERVER}
fi
if [ "${SERVER_ID}" = "" ]; then
SERVER_ID=${DEF_SERVER_ID}
fi
if [ "${DB_HOST}" = "" ]; then
DB_HOST=${DB_HOST}
fi
}
help(){
INFO "当前路径:${ROOT}"
INFO "用法:"
INFO "指令 [参数]"
INFO "参数:"
INFO " -si, --server_id 服务器id 推送的版本"
INFO " -a, --alias 别名"
INFO " -s, --server game_server|login_server 服务器类型"
action
INFO "未传参数则取默认参数:可以config.sh修改"
INFO "是否查看默认参数(y/n):"
read IS
if [ ${IS} == y ]; then
INFO "默认参数:`cat ./shell/config.sh`"
fi
}
action(){
INFO "指令列表:"
for k in ${!DOC[@]}; do
>&2 echo -e -n "\e[95m${k}\e[0;0m"
eval "printf ' %.0s' {1..$((26 - ${#k}))}"
>&2 echo -e "${DOC[$k]}"
done
}
# 输出命令行不全信息
fun_completion(){
echo $(declare -p DOC)
}
# --- 执行入口 -----------------------------------------------------
declare -A DOC
export ROOT=$(dirname $(dirname "$PWD"))
# 加载配置文件
source ${ROOT}/server/server/shell/config.sh
# 载入子仓库中的工具脚本
scripts=("server/server/shell/gen.sh" "server/server/shell/sql.sh" "server/server/shell/srv.sh" "server/server/shell/svn.sh")
for f in ${scripts[@]}; do
if [ ! -f ${ROOT}/${f} ]; then
continue
fi
source ${ROOT}/${f}
done
# 根据参数调用相应的命令
_CALL_FUNCTION $@
#declare -A DOC
#FilePath=$(dirname $(readlink -f "$0"))
#ROOT=$(dirname "${FilePath}")
#
## 加载配置文件
#source ${ROOT}/shell/config.sh
#
#
## 载入子仓库中的工具脚本
#scripts=("shell/gen.sh" "shell/sql.sh" "shell/srv.sh" "shell/svn.sh")
#for f in ${scripts[@]}; do
# if [ ! -f ${ROOT}/${f} ]; then
# continue
# fi
# source ${ROOT}/${f}
#done
#
## 根据参数调用相应的命令
#_CALL_FUNCTION $@