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 |