]>
Commit | Line | Data |
---|---|---|
d7091d84 CW |
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 |