name: bash-script-template description: 生成包含最佳实践的Bash脚本模板,包括错误处理、参数解析、日志记录和可移植性考虑。 allowed-tools: Read, Write, Edit, Bash, Glob, Grep
Bash脚本模板
生成包含最佳实践的Bash脚本模板。
能力
- 生成健壮的Bash脚本模板
- 设置正确的错误处理
- 使用getopts实现参数解析
- 创建日志记录工具
- 配置严格模式设置
- 生成可重用的函数库
使用场景
在以下情况下调用此技能:
- 创建遵循最佳实践的新Bash脚本
- 设置正确的错误处理模式
- 实现参数解析
- 创建可移植的Shell脚本
输入参数
| 参数 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| scriptName | 字符串 | 是 | 脚本名称 |
| description | 字符串 | 是 | 脚本描述 |
| arguments | 数组 | 否 | 脚本参数 |
| functions | 数组 | 否 | 要包含的函数 |
生成的模板
#!/usr/bin/env bash
#
# <scriptName> - <description>
#
# 用法: <scriptName> [选项] <参数>
#
set -euo pipefail
IFS=$'
\t'
# 脚本目录
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
# 颜色(如果终端支持)
if [[ -t 1 ]]; then
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[0;33m'
readonly BLUE='\033[0;34m'
readonly NC='\033[0m'
else
readonly RED='' GREEN='' YELLOW='' BLUE='' NC=''
fi
# 日志记录函数
log_info() { echo -e "${BLUE}[信息]${NC} $*"; }
log_success() { echo -e "${GREEN}[成功]${NC} $*"; }
log_warn() { echo -e "${YELLOW}[警告]${NC} $*" >&2; }
log_error() { echo -e "${RED}[错误]${NC} $*" >&2; }
die() { log_error "$*"; exit 1; }
# 退出时清理
cleanup() {
# 在此处添加清理任务
:
}
trap cleanup EXIT
# 用法说明
usage() {
cat <<EOF
用法: ${SCRIPT_NAME} [选项] <参数>
<description>
选项:
-h, --help 显示此帮助信息
-v, --verbose 启用详细输出
-d, --dry-run 显示将执行的操作(模拟运行)
-f, --force 强制操作
-o, --output 输出文件路径
参数:
argument 必需参数描述
示例:
${SCRIPT_NAME} -v input.txt
${SCRIPT_NAME} --output result.txt input.txt
EOF
}
# 解析参数
parse_args() {
local OPTIND opt
while getopts ":hvdfo:-:" opt; do
case "${opt}" in
h) usage; exit 0 ;;
v) VERBOSE=true ;;
d) DRY_RUN=true ;;
f) FORCE=true ;;
o) OUTPUT="${OPTARG}" ;;
-)
case "${OPTARG}" in
help) usage; exit 0 ;;
verbose) VERBOSE=true ;;
dry-run) DRY_RUN=true ;;
force) FORCE=true ;;
output=*) OUTPUT="${OPTARG#*=}" ;;
*) die "未知选项: --${OPTARG}" ;;
esac
;;
:) die "选项 -${OPTARG} 需要一个参数" ;;
?) die "未知选项: -${OPTARG}" ;;
esac
done
shift $((OPTIND - 1))
# 必需参数
if [[ $# -lt 1 ]]; then
usage
die "缺少必需参数"
fi
ARGUMENT="$1"
}
# 默认值
VERBOSE=${VERBOSE:-false}
DRY_RUN=${DRY_RUN:-false}
FORCE=${FORCE:-false}
OUTPUT=${OUTPUT:-}
# 主函数
main() {
parse_args "$@"
if [[ "${VERBOSE}" == true ]]; then
log_info "已启用详细模式"
fi
if [[ "${DRY_RUN}" == true ]]; then
log_warn "模拟运行模式 - 不会进行任何更改"
fi
log_info "正在处理: ${ARGUMENT}"
# 主要逻辑在此处
log_success "完成!"
}
main "$@"
目标流程
- shell脚本开发
- 跨平台CLI兼容性
- CLI应用程序引导