#!/bin/bash
#======================================================
# 脚本名称: 脚本模板
# 描述: 包含基本路径、日期时间、日志打印、参数解析
#======================================================
set -euo pipefail
# ==================== 基本路径 ====================
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
BASE_DIR="${SCRIPT_DIR}"
LOG_DIR="${BASE_DIR}/logs"
mkdir -p "${LOG_DIR}"
# ==================== 日期时间 ====================
readonly DATE_FMT="%Y-%m-%d"
readonly DATETIME_FMT="%Y-%m-%d %H:%M:%S"
readonly TODAY="$(date +${DATE_FMT})"
readonly NOW="$(date +${DATETIME_FMT})"
readonly TIMESTAMP="$(date +%Y%m%d_%H%M%S)"
# ==================== 日志打印 ====================
LOG_FILE="${LOG_DIR}/${SCRIPT_NAME%.sh}_${TODAY}.log"
log() {
local level="$1"
shift
local msg="$*"
local ts
ts="$(date +${DATETIME_FMT})"
local line="[${ts}] [${level}] ${msg}"
echo "${line}" | tee -a "${LOG_FILE}"
}
log_info() { log "INFO" "$@"; }
log_warn() { log "WARN" "$@"; }
log_error() { log "ERROR" "$@"; }
log_debug() { log "DEBUG" "$@"; }
# ==================== 使用说明 ====================
usage() {
cat <<EOF
用法: ${SCRIPT_NAME} [选项]
选项:
-h, --help 显示帮助信息
-v, --verbose 开启详细模式
-o, --output DIR 指定输出目录 (默认: ${BASE_DIR}/output)
-f, --file FILE 指定输入文件
-n, --name NAME 指定名称
--dry-run 模拟执行,不实际操作
示例:
${SCRIPT_NAME} -f input.txt -n test --verbose
EOF
exit 0
}
# ==================== 参数解析 ====================
# 默认值
VERBOSE=false
DRY_RUN=false
OUTPUT_DIR="${BASE_DIR}/output"
INPUT_FILE=""
TARGET_NAME=""
parse_args() {
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help)
usage
;;
-v|--verbose)
VERBOSE=true
shift
;;
-o|--output)
OUTPUT_DIR="$2"
shift 2
;;
-f|--file)
INPUT_FILE="$2"
shift 2
;;
-n|--name)
TARGET_NAME="$2"
shift 2
;;
--dry-run)
DRY_RUN=true
shift
;;
*)
log_error "未知参数: $1"
usage
;;
esac
done
}
# ==================== 参数校验 ====================
validate() {
if [[ -n "${INPUT_FILE}" && ! -f "${INPUT_FILE}" ]]; then
log_error "输入文件不存在: ${INPUT_FILE}"
exit 1
fi
mkdir -p "${OUTPUT_DIR}"
}
# ==================== 主逻辑 ====================
main() {
parse_args "$@"
log_info "========== 脚本开始执行 =========="
log_info "脚本目录: ${SCRIPT_DIR}"
log_info "当前时间: ${NOW}"
log_info "输出目录: ${OUTPUT_DIR}"
[[ -n "${INPUT_FILE}" ]] && log_info "输入文件: ${INPUT_FILE}"
[[ -n "${TARGET_NAME}" ]] && log_info "目标名称: ${TARGET_NAME}"
${VERBOSE} && log_debug "详细模式已开启"
${DRY_RUN} && log_warn "模拟执行模式"
validate
# TODO: 在此处添加业务逻辑
log_info "========== 脚本执行完成 =========="
}
main "$@"
版权归属:
天明
许可协议:
本文使用《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》协议授权
评论区