名称:getopts解析器生成器 描述:为shell脚本生成基于getopts的参数解析,支持短/长选项和验证。 允许工具:读取、写入、编辑、Bash、Glob、Grep
Getopts解析器生成器
为shell脚本生成基于getopts的参数解析。
功能
- 生成getopts解析代码
- 支持短选项和长选项
- 实现选项验证
- 创建帮助文本生成
- 处理必需参数
- 生成使用文档
使用场景
在以下情况调用此技能:
- 为shell脚本添加参数解析
- 支持短选项和长选项
- 验证参数值
- 生成帮助文本
生成模式
带长选项的Getopts
#!/usr/bin/env bash
# 默认值
VERBOSE=false
OUTPUT=""
FORMAT="text"
FORCE=false
# 使用说明函数
usage() {
cat <<EOF
用法:$(basename "$0") [选项] <输入文件>
选项:
-h, --help 显示此帮助
-v, --verbose 启用详细输出
-o, --output 文件 输出文件(默认:标准输出)
-f, --format 格式 输出格式:text、json、csv(默认:text)
-F, --force 强制覆盖现有文件
参数:
输入文件 要处理的输入文件
EOF
}
# 解析选项
parse_options() {
# 将长选项转换为短选项
for arg in "$@"; do
shift
case "$arg" in
'--help') set -- "$@" '-h' ;;
'--verbose') set -- "$@" '-v' ;;
'--output') set -- "$@" '-o' ;;
'--format') set -- "$@" '-f' ;;
'--force') set -- "$@" '-F' ;;
*) set -- "$@" "$arg" ;;
esac
done
# 解析短选项
local OPTIND opt
while getopts ":hvo:f:F" opt; do
case "$opt" in
h) usage; exit 0 ;;
v) VERBOSE=true ;;
o) OUTPUT="$OPTARG" ;;
f)
case "$OPTARG" in
text|json|csv) FORMAT="$OPTARG" ;;
*) die "无效格式:$OPTARG" ;;
esac
;;
F) FORCE=true ;;
:) die "选项 -$OPTARG 需要一个参数" ;;
\?) die "未知选项:-$OPTARG" ;;
esac
done
shift $((OPTIND - 1))
# 剩余参数
if [[ $# -lt 1 ]]; then
usage
die "缺少必需参数:输入文件"
fi
INPUT="$1"
shift
# 额外参数
EXTRA_ARGS=("$@")
}
die() {
echo "错误:$*" >&2
exit 1
}
# 解析并验证
parse_options "$@"
# 验证
[[ -f "$INPUT" ]] || die "未找到输入文件:$INPUT"
[[ -n "$OUTPUT" && -f "$OUTPUT" && "$FORCE" != true ]] && \
die "输出文件已存在:$OUTPUT(使用 --force 强制覆盖)"
目标流程
- shell脚本开发
- shell补全脚本
- 参数解析器设置