两种shell选项参数解析工具
原理
#!/bin/bashwhile [[ $# -ge 1 ]]; do case $1 in -a|--aa ) A=$2 echo "经过a" shift 2 ;; -b|--bb ) B=$2 echo "经过b" shift 2 ;; -c|--cc ) C="true" echo "经过c" shift ;; * ) echo "经过*:$1" shift ;; esacdoneecho "A = $A"echo "B = $B"echo "C = $C"
- 执行:
sh test.sh --bb bbb -c -d -a aaa
经过b经过c经过*:-d经过aA = aaaB = bbbC = true
$# -ge 1
:参数个数大于等于1
case esac
语句 ;;
:与其他语言中的break
,但是此时不能省略贯穿后面,语法报错 *)
:*
表示通配符,相当于其他语言的default
未匹配项
shfit
:位置参数左移命令 - 例子:
shift 3
表示原来的$4
现在变成$1
,原来的$5
现在变成$2
,原来的$1
、$2
、$3
丢弃,$0
不移动,$#
参数个数会减3。