48 lines
1.5 KiB
Bash
48 lines
1.5 KiB
Bash
#!/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
|