summaryrefslogtreecommitdiffstats
path: root/misc-utils/getopt-parse.bash
diff options
context:
space:
mode:
authorSami Kerola2016-07-27 12:17:47 +0200
committerSami Kerola2016-07-27 17:08:43 +0200
commitd27f5fe770025e456fbd33b87a96968f34c455ed (patch)
treed077794a65d32b1ba472d0044b9e2430e433f0fd /misc-utils/getopt-parse.bash
parentagetty: call uname() only when necessary (diff)
downloadkernel-qcow2-util-linux-d27f5fe770025e456fbd33b87a96968f34c455ed.tar.gz
kernel-qcow2-util-linux-d27f5fe770025e456fbd33b87a96968f34c455ed.tar.xz
kernel-qcow2-util-linux-d27f5fe770025e456fbd33b87a96968f34c455ed.zip
getops: improve getopt-parse.bash example
Use correct names of example scripts in the script. Remove use of backticks, they require quoting that makes the example harder to follow. Split one-liners to one-command-at-a-time expressions. Add continue keyword to avoid additional case statement matching. Be strict with quoting. Reported-by: Benno Schulenberg <bensberg@justemail.net> Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'misc-utils/getopt-parse.bash')
-rw-r--r--misc-utils/getopt-parse.bash84
1 files changed, 56 insertions, 28 deletions
diff --git a/misc-utils/getopt-parse.bash b/misc-utils/getopt-parse.bash
index aab8c6238..348c445a4 100644
--- a/misc-utils/getopt-parse.bash
+++ b/misc-utils/getopt-parse.bash
@@ -1,47 +1,75 @@
#!/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
+# A small example script for using the getopt(1) program.
+# This script will only work with bash(1).
+# A similar script using the tcsh(1) language can be found
+# as getopt-parse.tcsh.
# Example input and output (from the bash prompt):
-# ./parse.bash -a par1 'another arg' --c-long 'wow!*\?' -cmore -b " very long "
+#
+# ./getopt-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 '
+# Option c, argument 'more'
+# Option b, argument ' very long '
# Remaining arguments:
-# --> `par1'
-# --> `another arg'
-# --> `wow!*\?'
+# --> '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' -- "$@")
+# 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 '-long,b-long:,c-long::' -n 'example.bash' -- "$@")
-if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
+if [ $? -ne 0 ]; then
+ echo 'Terminating...' >&2
+ exit 1
+fi
-# Note the quotes around `$TEMP': they are essential!
+# Note the quotes around "$TEMP": they are essential!
eval set -- "$TEMP"
+unset TEMP
-while true ; do
+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)
+ '-a'|'--a-long')
+ echo 'Option a'
+ shift
+ continue
+ ;;
+ '-b'|'--b-long')
+ echo "Option b, argument '$2'"
+ shift 2
+ continue
+ ;;
+ '-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 ;;
+ '')
+ echo 'Option c, no argument'
+ ;;
+ *)
+ echo "Option c, argument '$2'"
+ ;;
+ esac
+ shift 2
+ continue
+ ;;
+ '--')
+ shift
+ break
+ ;;
+ *)
+ echo 'Internal error!' >&2
+ exit 1
+ ;;
esac
done
-echo "Remaining arguments:"
-for arg do echo '--> '"\`$arg'" ; done
+
+echo 'Remaining arguments:'
+for arg; do
+ echo "--> '$arg'"
+done