getopt 示例

#!/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

  

原文地址:https://www.cnblogs.com/zbseoag/p/12672572.html