summaryrefslogtreecommitdiffstats
path: root/misc-utils/getopt-parse.bash
diff options
context:
space:
mode:
authorKarel Zak2012-06-26 18:17:22 +0200
committerKarel Zak2012-06-26 20:48:23 +0200
commitf9a20f0b58a1dfb3571b53ad9fee3115d788460f (patch)
tree0258321963949564b80773ff7ea77c077c9b2656 /misc-utils/getopt-parse.bash
parentbuild-sys: convert misc-utils/ to module (diff)
downloadkernel-qcow2-util-linux-f9a20f0b58a1dfb3571b53ad9fee3115d788460f.tar.gz
kernel-qcow2-util-linux-f9a20f0b58a1dfb3571b53ad9fee3115d788460f.tar.xz
kernel-qcow2-util-linux-f9a20f0b58a1dfb3571b53ad9fee3115d788460f.zip
build-sys: move getopt to misc-utils/
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/getopt-parse.bash')
-rw-r--r--misc-utils/getopt-parse.bash47
1 files changed, 47 insertions, 0 deletions
diff --git a/misc-utils/getopt-parse.bash b/misc-utils/getopt-parse.bash
new file mode 100644
index 000000000..29e7f6fa9
--- /dev/null
+++ b/misc-utils/getopt-parse.bash
@@ -0,0 +1,47 @@
+#!/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