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