]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
getops: improve getopt-parse.bash example
authorSami Kerola <kerolasa@iki.fi>
Wed, 27 Jul 2016 10:17:47 +0000 (11:17 +0100)
committerSami Kerola <kerolasa@iki.fi>
Wed, 27 Jul 2016 15:08:43 +0000 (16:08 +0100)
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>
misc-utils/getopt-parse.bash
misc-utils/getopt-parse.tcsh

index aab8c62384bc6846e8f17e1fc763247154e119b1..348c445a4373ff44d6f6ba88e03b6380311697d0 100644 (file)
@@ -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
index 408c4706b0df7c3d94c5291168017887769ccee2..032d7ac0812494f8f0bc7648344002a81d635153 100644 (file)
@@ -1,9 +1,9 @@
 #!/bin/tcsh
 
-# A small example program for using the new getopt(1) program.
-# This program will only work with tcsh(1)
-# An similar program using the bash(1) script language can be found
-# as parse.bash
+# A small example script for using the getopt(1) program.
+# This script will only work with tcsh(1).
+# A similar script using the bash(1) language can be found
+# as getopt-parse.bash.
 
 # Example input and output (from the tcsh prompt):
 # ./parse.tcsh -a par1 'another arg' --c-long 'wow\!*\?' -cmore -b " very long "