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