#!/bin/bash
# ======================================== 配色区 ========================================
# 颜色设置
# \033[0;31m 解析
# \033 ESC,0 普通样式,31 红色,m 结束, RESET=$'\033[0m'重置颜色
# \033 所有Unix Shell都支持. \e bash/zsh 支持, POSIX sh不支持
# 0; 是SGR样式代码,同样的参数有如下
# - 0 默认样式(关闭加粗/下划线)
# - 1 加粗/高亮
# - 4 下划线
# - 5 闪烁
# - 7 反显
RED=$'\033[1,31m'
BOLD=$'\033[1m'
BLUE=$'\033[1;34m'
CYAN=$'\033[1;7;36m'
YELLOW=$'\033[1;33m'
YELLOW_AC=$'\033[1;5;33m'
GREEN=$'\033[1;32m'
RESET=$'\033[0m'
STATUS_OK=$'\033[1;32m●\033[0m'
STATUS_WARN=$'\033[1;33m●\033[0m'
STATUS_ERR=$'\033[1;31m\033[5m●\033[0m'
ALERT_INFO=$'\033[1;5;41;97m[ALERT]\033[0m'
配置区
# ======================================== 配置区 ========================================
# 当前脚本的全路径
SCRIPT_DIR="$(cd "$(dirname $0)" && pwd)"
# 今天的日期
TODAY_DATE=$(date +%Y-%m-%d)
样式区
# ======================================== 样式区 ========================================
LINFO(){
echo "${GREEN}$(date +%H:%M:%S)${RESET} ${BLUE}[INFO] ▶${RESET} $1"
}
LWARN(){
echo "${GREEN}$(date +%H:%M:%S)${RESET} ${YELLOW}[INFO] ▶${RESET} $1"
}
LERROR(){
echo "${GREEN}$(date +%H:%M:%S)${RESET} ${RED}[INFO] ▶${RESET} $1"
}
# 分隔符,自动撑满宽度(终端友好)
SEP(){
printf '%*s\n' "$COLUMNS" '' | tr ' ' '-'
}
TITLE(){
local title="$1"
local w=$(tput cols 2>/dev/null || echo 80)
local pad=$(( (w - ${#title} - 2) / 2 ))
printf '=%.0s' $(seq 1 $pad)
printf ' %s' "$title"
printf '=%.0s' $(seq 1 $((w - pad - ${#title} - 2)) )
echo
}
# 标题居中带颜色
TITLEC(){
# 标题内容
local txt="$1"
# 终端宽度
local w=$(tput cols 2>/dev/null || echo 80)
# 左右留1个空格
local inner=$((w - ${#txt} - 8))
(( inner < 20 )) && inner=20
local left=$(( inner / 2 ))
local right=$(( inner - left ))
local lp sp
printf -v lp '%*s' "$left" ''
printf -v sp ' %*s' "$right" ''
printf '%b%s %s %s%b\n' "${CYAN}" "$lp" "$txt" "$sp" "${RESET}"
}
主方法菜单区
# ======================================== 主方法入口 ========================================
# 交互式脚本方法主入口
func_main(){
# 开启备用缓冲区
trap 'printf "\033[?1049l"' EXIT
# 切换备用缓冲区
printf "\033[?1049h"
# 立刻定位光标到左上角
printf "\033[H"
while true; do
echo
echo -e "[1] "
echo -e "[2] "
echo -e "[Q] 退出系统"
echo
read -rep "${YELLOW}请输入序号${RESET} ${YELLOW_AC}▶${RESET}" choice
case "${choice}" in
1)
func_method_1
;;
2)
func_method_2
;;
[Qq])
LINFO "退出系统"
exit 0
;;
*)
LWARN "输入有误"
;;
esac
done
}
# 别忘了调用方法
func_main