shell可选配置参数(混合位置参数)示例

有时,公司当前的shell 脚本是按顺序解析的N个参数,且有固定含义。后面需要扩展时十分不方便,之前的参数我们可能用不到,新增太多参数又会在调用时比较复杂。

为避免对就参数的修改,新增 -A, -B .... 等拓展可配置参数适应多情况。下面用GPT写了个demo

#!/bin/bash
# explain####################
#input : ./optDbg.sh a b  c -A a.txt -B -- b.txt
#output: 
#PKG_A      : a.txt
#PKG_B      : --
#Verbose   : false
#Positionals:
#a
#b
#c
#b.txt
#first item: a
###############

verbose=false
positional_args=()
PKG_A=""
PKG_B=""

# 参数解析
while [[ $# -gt 0 ]]; do
  case "$1" in
    -A)
      PKG_A="$2"
      shift 2  #移除已解析的参数
      ;;
    -B)
      PKG_B="$2"
      shift 2
      ;;
    -v|--verbose)
      verbose=true
      shift
      ;;
    --) # 显式参数结束标志,跳过,不再按- 解析后面参数。
      shift
      break
      ;;
    -*) # 未知选项
      echo "Unknown option: $1"
      exit 1
      ;;
    *) # 位置参数
      positional_args+=("$1")
      shift
      ;;
  esac
done

# 如果 -- 之后还有位置参数,加进去
while [[ $# -gt 0 ]]; do
  positional_args+=("$1")
  shift
done

# 输出测试
echo "PKG_A      : $PKG_A"
echo "PKG_B      : $PKG_B"
echo "Verbose   : $verbose"
echo "Positionals:"
for arg in "${positional_args[@]}"; do
  echo "  $arg"
done

echo "first item: ${positional_args[0]}" 

前面的参数可解析到 positional_args 数组里面,这块可保持不变。

新增的参数用-A, -B 等额外解析。

这样即可兼容之前的,又可能使用新参数功能了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值