| 1 | #!/bin/bash | 
| 2 |  | 
| 3 | # A small example program for using the new getopt(1) program. | 
| 4 | # This program will only work with bash(1) | 
| 5 | # An similar program using the tcsh(1) script language can be found | 
| 6 | # as parse.tcsh | 
| 7 |  | 
| 8 | # Example input and output (from the bash prompt): | 
| 9 | # ./parse.bash -a par1 'another arg' --c-long 'wow!*\?' -cmore -b " very long " | 
| 10 | # Option a | 
| 11 | # Option c, no argument | 
| 12 | # Option c, argument `more' | 
| 13 | # Option b, argument ` very long ' | 
| 14 | # Remaining arguments: | 
| 15 | # --> `par1' | 
| 16 | # --> `another arg' | 
| 17 | # --> `wow!*\?' | 
| 18 |  | 
| 19 | # Note that we use `"$@"' to let each command-line parameter expand to a | 
| 20 | # separate word. The quotes around `$@' are essential! | 
| 21 | # We need TEMP as the `eval set --' would nuke the return value of getopt. | 
| 22 | TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \ | 
| 23 | -n 'example.bash' -- "$@"` | 
| 24 |  | 
| 25 | if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi | 
| 26 |  | 
| 27 | # Note the quotes around `$TEMP': they are essential! | 
| 28 | eval set -- "$TEMP" | 
| 29 |  | 
| 30 | while true ; do | 
| 31 | case "$1" in | 
| 32 | -a|--a-long) echo "Option a" ; shift ;; | 
| 33 | -b|--b-long) echo "Option b, argument \`$2'" ; shift 2 ;; | 
| 34 | -c|--c-long) | 
| 35 | # c has an optional argument. As we are in quoted mode, | 
| 36 | # an empty parameter will be generated if its optional | 
| 37 | # argument is not found. | 
| 38 | case "$2" in | 
| 39 | "") echo "Option c, no argument"; shift 2 ;; | 
| 40 | *)  echo "Option c, argument \`$2'" ; shift 2 ;; | 
| 41 | esac ;; | 
| 42 | --) shift ; break ;; | 
| 43 | *) echo "Internal error!" ; exit 1 ;; | 
| 44 | esac | 
| 45 | done | 
| 46 | echo "Remaining arguments:" | 
| 47 | for arg do echo '--> '"\`$arg'" ; done |