如何为Bash脚本添加带参数的create/delete动作子命令
在Bash脚本中添加create/delete子命令的实现方案
核心逻辑
先提取第一个参数作为子命令,判断其合法性后,针对不同子命令单独处理后续的--name/--id等选项,既兼容原有选项处理逻辑,又实现子命令的分支控制。
完整示例脚本
#!/bin/bash # 检查是否传入子命令 if [ $# -eq 0 ]; then echo "错误:必须指定子命令(create/delete)" echo "用法示例:" echo " $0 create --name foo --id 1234" echo " $0 delete --id 1234" exit 1 fi # 捕获子命令并移除该参数,剩余参数用于选项处理 ACTION="$1" shift # 初始化参数变量 NAME="" ID="" # 按子命令分支处理选项 case "$ACTION" in create) # 处理create子命令的选项 while [[ $# -gt 0 ]]; do case "$1" in --name) NAME="$2" shift 2 ;; --id) ID="$2" shift 2 ;; *) echo "错误:create子命令不支持选项 $1" exit 1 ;; esac done # 校验create的必填参数 if [[ -z "$NAME" || -z "$ID" ]]; then echo "错误:create子命令需同时指定--name和--id" exit 1 fi echo "执行create操作:名称=$NAME,ID=$ID" # 此处添加create的实际业务逻辑 ;; delete) # 处理delete子命令的选项 while [[ $# -gt 0 ]]; do case "$1" in --id) ID="$2" shift 2 ;; *) echo "错误:delete子命令不支持选项 $1" exit 1 ;; esac done # 校验delete的必填参数 if [[ -z "$ID" ]]; then echo "错误:delete子命令必须指定--id" exit 1 fi echo "执行delete操作:ID=$ID" # 此处添加delete的实际业务逻辑 ;; *) echo "错误:未知子命令 $ACTION,支持的子命令为create/delete" exit 1 ;; esac
关键细节说明
- 子命令捕获:通过
$1获取第一个参数作为动作,再用shift将其从参数列表中移除,后续即可专注处理当前子命令对应的选项。 - 分支选项处理:每个子命令的
case分支内,单独定义支持的选项和参数规则,比如create需要双参数、delete仅需ID。 - 参数校验:在每个子命令的选项处理完成后,检查必填参数是否齐全,避免非法调用导致的逻辑错误。
测试命令
./run.sh create --name foo --id 1234 ./run.sh delete --id 1234
内容的提问来源于stack exchange,提问作者Ufder
相关产品推荐
相关产品推荐

