#!/bin/bash
# ./test.sh -a oneArg 'tow arg' --ccc=ccccc -c -b bbbbb
# 选项 a
# 选项 c 值是 'ccccc'
# 选项 c 没有值
# 选项 b 值是 'bbbbb'
# 剩余参数:
# --> oneArg
# --> tow arg
#-o 短选项, --long 长选项,选项后接冒号表示带有值,接两个冒号表示选项值可选,选项值可选时必须紧贴选项 如 -cArg
#-- 用法:如创建"-f"的目录怎么办?mkdir -- -f 这样-f就不会被当作选项
TEMP=`getopt -o ab:c:: --long aaa,bbb:,ccc:: -n 'test.sh' -- "$@"`
if [ $? != 0 ] ; then echo "终止运行..." >&2; exit 1; fi
#重新排列参数的顺序,也就是改变$1,$2...$n的值,这些值在getopt中重新排列过了
eval set -- "$TEMP"
option="$1"
value="$2"
while true ; do
case "$1" in
-a|--aaa) echo "选项 a" ; shift ;;#选项不带值 shift
-b|--bbb) echo "选项 b 值是 '$2'" ; shift 2 ;; #选项带值 shift 2
-c|--ccc)
case "$2" in
"") echo "选项 c 没有值"; shift 2 ;;
*) echo "选项 c 值是 '$2'" ; shift 2 ;;
esac ;;
--) shift ; break ;;
*) echo "内部错误" ; exit 1 ;;
esac
done
echo "剩余参数:"
for arg in "$@"
do
echo "--> $arg" ;
done