|  | #!/bin/bash | 
|  |  | 
|  | # A small example program for using the new getopt(1) program. | 
|  | # This program will only work with bash(1) | 
|  | # An similar program using the tcsh(1) script language can be found | 
|  | # as parse.tcsh | 
|  |  | 
|  | # Example input and output (from the bash prompt): | 
|  | # ./parse.bash -a par1 'another arg' --c-long 'wow!*\?' -cmore -b " very long " | 
|  | # Option a | 
|  | # Option c, no argument | 
|  | # Option c, argument `more' | 
|  | # Option b, argument ` very long ' | 
|  | # Remaining arguments: | 
|  | # --> `par1' | 
|  | # --> `another arg' | 
|  | # --> `wow!*\?' | 
|  |  | 
|  | # Note that we use `"$@"' to let each command-line parameter expand to a | 
|  | # separate word. The quotes around `$@' are essential! | 
|  | # We need TEMP as the `eval set --' would nuke the return value of getopt. | 
|  | TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \ | 
|  | -n 'example.bash' -- "$@"` | 
|  |  | 
|  | if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi | 
|  |  | 
|  | # Note the quotes around `$TEMP': they are essential! | 
|  | eval set -- "$TEMP" | 
|  |  | 
|  | while true ; do | 
|  | case "$1" in | 
|  | -a|--a-long) echo "Option a" ; shift ;; | 
|  | -b|--b-long) echo "Option b, argument \`$2'" ; shift 2 ;; | 
|  | -c|--c-long) | 
|  | # c has an optional argument. As we are in quoted mode, | 
|  | # an empty parameter will be generated if its optional | 
|  | # argument is not found. | 
|  | case "$2" in | 
|  | "") echo "Option c, no argument"; shift 2 ;; | 
|  | *)  echo "Option c, argument \`$2'" ; shift 2 ;; | 
|  | esac ;; | 
|  | --) shift ; break ;; | 
|  | *) echo "Internal error!" ; exit 1 ;; | 
|  | esac | 
|  | done | 
|  | echo "Remaining arguments:" | 
|  | for arg do echo '--> '"\`$arg'" ; done |