228 lines
4.4 KiB
Bash
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 $@
|