150 lines
3.8 KiB
Bash
150 lines
3.8 KiB
Bash
#!/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}<COMMAND>${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}<COMMAND>${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 $@
|