#!/bin/bash # vi: set tabstop=2 shiftwidth=2 noexpandtab : SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) BASE_DIR=$(cd "$(dirname "$0")"/../ && pwd) declare -A MAP_COMMAND declare -A MAP_COMMAND_DESC declare -A MAP_COMMAND_HELP ################################################################################ # COLORS ################################################################################ CW="\e[1;37m" # White CG="\e[0;32m" # Green CY="\e[0;33m" # Yellow CC="\e[1;36m" # Cyan BR="\e[41m" # Background Red BB="\e[44m" # Background Blue NC="\e[0m" # Reset ################################################################################ # FUNCTIONS ################################################################################ # Заполнение символом. # # @param char символ # @param len сколько раз повторять function StrFill() { local __char=$1 local __len=$2 for (( i = 0; i < $__len; i++ )); do echo -ne $__char done } # Текст в рамке. # # @param text текст function Title() { local __text="$1" local __clear_text=$(echo -e "$__text" | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g") local __size=${#__clear_text} local __line=$(StrFill "─" $__size+2) echo -e "┌${__line}┐" echo -e "│ ${__text} │" echo -e "└${__line}┘" } # Сообщение об ошибке. # # @param text сообщение function LogError { echo -e "${BR}${CW}ERR${NC} $@" } # Отладочное сообщение. # # @param text сообщение function LogDebug { if [[ $DD_DEBUG -gt 0 ]]; then echo -e "${BB}${CW}DBG${NC} $@" fi } # Вывести заголовок скрипта (логотип) # function AppHeader() { Title "${CG}LAUNCHER v3" echo -e "${NC}" } # Табличное представление. # # Пример: # echo "command | description" | as_table function as_table() { cat < /dev/stdin | column -d -t -s"|" -o"-" # cat < /dev/stdin | awk 'BEGIN { FS = "|"}; { printf "%-20s - %-20s\n", $1, $2 }' } ################################################################################ # HELP COMMAND ################################################################################ MAP_COMMAND["help"]=fn_command_help MAP_COMMAND_DESC["help"]="показать страницу помощи или страницу помощи указанной команды (help ${CY}${NC})." function fn_command_help() { local __cmd=$1 if [[ -n "$__cmd" ]]; then ${MAP_COMMAND_HELP[$__cmd]} else fn_command_help_full fi } function fn_command_help_full() { echo -e "Использование:\n ${CW}$(basename $0) ${CY}${NC}" echo -e "\nКоммнды:" __text="" for V in "${!MAP_COMMAND[@]}"; do __text="${__text} ${CY}${V}${NC} | ${MAP_COMMAND_DESC[$V]}\n" done echo -e "$__text" | as_table } ################################################################################ # IMPORT ################################################################################ for V in $(ls "$SCRIPT_DIR"/scripts.d/*.sh); do . $V done ################################################################################ # MAIN ################################################################################ function Main() { local __args=($@) local __command=${__args[0]} if [[ -n $__command ]]; then for __cmd in $(echo "${!MAP_COMMAND[@]}"); do if [ $__command = $__cmd ]; then AppHeader ${MAP_COMMAND[$__cmd]} ${__args[@]:1} return fi done LogError "Не известная команда '${__command}'" echo fi fn_command_help } ################################################################################ Main $@