Bash脚本中同时使用选项与参数:新增--save选项实现数据保存
实现方案
你可以通过全局变量标记--save选项,同时调整主循环的参数处理逻辑,先识别全局选项再处理命令函数。以下是具体修改步骤:
1. 初始化全局标记变量
在主循环前添加全局变量,默认设置为不保存状态:
# 初始化保存标记,0=不保存,1=需要保存 SAVE_OUTPUT=0
2. 修改主循环处理--save选项
在主循环的case语句中新增--save分支,遇到该选项时切换标记并跳过参数:
while (( $# )) do case "$1" in --help | -h) usage exit 0 ;; --version | -v) version exit 0 ;; --save) # 标记需要保存输出 SAVE_OUTPUT=1 shift # 跳过当前参数 ;; funcone \ | functwo \ | functhree ) command=$1 shift "app-$command" "$@" # 传递剩余参数给对应函数 exit 0 ;; *) badUsage "Option/command not recognized." exit 1 ;; esac done badUsage exit 1
3. 在函数中根据标记处理输出
以app-funcone为例,修改函数逻辑,根据SAVE_OUTPUT的值决定是否将curl结果保存到文件:
app-funcone() { # 执行curl获取数据 local curl_data=$(curl "https://your-target-api.com") if (( SAVE_OUTPUT == 1 )); then # 保存到文件(可自定义文件名,这里用函数名作为前缀) echo "$curl_data" > "${FUNCNAME}_output.txt" echo "数据已保存到 ${FUNCNAME}_output.txt" else # 正常输出到终端 echo "$curl_data" fi }
调用示例
- 不保存输出:
./your-script.sh funcone - 保存输出:
./your-script.sh --save funcone
注意:--save作为全局选项,需要放在命令(如funcone)之前;如果需要支持--save在命令之后,可在函数内部添加参数处理逻辑,但会增加复杂度,建议统一全局选项前置的调用方式。
内容的提问来源于stack exchange,提问作者MVB
相关产品推荐
相关产品推荐

