#!/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 $@