| 1 |
frodo |
259 |
#!/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 |