兩種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。