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