aflag= bflag= while getopts :ab: name "$@" do case $name in a) aflag=1 ;; b) bflag=1 bval=$OPTARG;; :) echo $0: error: option \`$OPTARG\' requires an argument echo Usage: $0 [-a] [-b value] args exit 2;; ?) echo $0: error: illegal option character \`$OPTARG\' echo Usage: $0 [-a] [-b value] args exit 2;; esac done if [ ! -z "$aflag" ] ; then echo -a specified ; fi if [ ! -z "$bflag" ] ; then echo -b $bval specified ; fi if [ "$OPTIND" -gt 1 ] then shift $(( $OPTIND - 1 )) fi echo remaining args: "$*" exit 0