#!/bin/bash Usage() { echo -e "Usage: `basename $0` [-a] [-b value] [-c value] [-h] args\n"; exit 1; } PARAM_A_FLAG=0; PARAM_B_FLAG=0; PARAM_B_VAL=""; PARAM_C_FLAG=0; PARAM_C_VAL=""; #可以调整参数的顺序 ARG=`getopt ab:c:h: $*` #重新设置参数 set --$ARG; #注意冒号之后的空格一定要有 while getopts ab:c:h PARAM_VAL do case $PARAM_VAL in a|auto) PARAM_A_FLAG=1; ;; b) PARAM_B_FLAG=1; PARAM_B_VAL=$OPTARG; ;; c|cc) PARAM_C_FLAG=1; PARAM_C_VAL=$OPTARG; ;; h|help) Usage; ;; *) ;; esac done if [ $PARAM_A_FLAG -ne 0 ]; then echo -e "******** option -a specified! ********\n"; fi if [ $PARAM_B_FLAG -ne 0 ]; then echo "******** option -b specified! ********"; echo -e "-b:$PARAM_B_VAL\n"; fi if [ ! -z $PARAM_C_VAL ]; then echo "******** option -c specifiled! ********\n"; echo -e "-c value:$PARAM_C_VAL\n"; fi shift $(($OPTIND -1)); printf "Remaining arguments are: %s\n" "$*";
结果:
./args.sh -a -b bb -c cc dd
******** option -a specified! ********
******** option -b specified! ********
-b:bb
******** option -c specifiled! ********\n
-c value:cc
Remaining arguments are: dd
./args.sh -h
Usage: args.sh [-a] [-b value] [-c value] [-h] args