* [PATCH] getops: improve getopt-parse.bash example
@ 2016-07-27 10:34 Sami Kerola
2016-07-27 11:15 ` Benno Schulenberg
0 siblings, 1 reply; 4+ messages in thread
From: Sami Kerola @ 2016-07-27 10:34 UTC (permalink / raw)
To: util-linux; +Cc: Sami Kerola
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.
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
---
misc-utils/getopt-parse.bash | 78 ++++++++++++++++++++++++++++++--------------
1 file changed, 53 insertions(+), 25 deletions(-)
diff --git a/misc-utils/getopt-parse.bash b/misc-utils/getopt-parse.bash
index aab8c62..923ddd8 100644
--- a/misc-utils/getopt-parse.bash
+++ b/misc-utils/getopt-parse.bash
@@ -3,45 +3,73 @@
# 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
+# 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
--
2.9.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] getops: improve getopt-parse.bash example
2016-07-27 10:34 [PATCH] getops: improve getopt-parse.bash example Sami Kerola
@ 2016-07-27 11:15 ` Benno Schulenberg
2016-07-27 15:20 ` Sami Kerola
0 siblings, 1 reply; 4+ messages in thread
From: Benno Schulenberg @ 2016-07-27 11:15 UTC (permalink / raw)
To: Sami Kerola; +Cc: Util-Linux
In the subject line: s/ops/opt/.
On Wed, Jul 27, 2016, at 12:34, Sami Kerola wrote:
> --- a/misc-utils/getopt-parse.bash
> +++ b/misc-utils/getopt-parse.bash
> @@ -3,45 +3,73 @@
> # 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
When here anyway, maybe fix a typo: s/An/A/.
Add a missing period: s/)/)./.
And adjust for the times: s/new //.
> -# as parse.tcsh
> +# as getopt-parse.tcsh
Also add period: s/tcsh/tcsh./
Benno
--
http://www.fastmail.com - Choose from over 50 domains or use your own
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] getops: improve getopt-parse.bash example
2016-07-27 11:15 ` Benno Schulenberg
@ 2016-07-27 15:20 ` Sami Kerola
2016-08-02 14:09 ` Karel Zak
0 siblings, 1 reply; 4+ messages in thread
From: Sami Kerola @ 2016-07-27 15:20 UTC (permalink / raw)
To: Benno Schulenberg; +Cc: Util-Linux
On 27 July 2016 at 12:15, Benno Schulenberg <bensberg@justemail.net> wrote:
>
> In the subject line: s/ops/opt/.
>
> On Wed, Jul 27, 2016, at 12:34, Sami Kerola wrote:
>> --- a/misc-utils/getopt-parse.bash
>> +++ b/misc-utils/getopt-parse.bash
>> @@ -3,45 +3,73 @@
>> # 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
>
> When here anyway, maybe fix a typo: s/An/A/.
> Add a missing period: s/)/)./.
> And adjust for the times: s/new //.
>
>> -# as parse.tcsh
>> +# as getopt-parse.tcsh
>
> Also add period: s/tcsh/tcsh./
>
> Benno
Thanks Benno.
The example file banner is updated to both of them. I also changed the
example script
to call itself as script rather than a program.
https://github.com/kerolasa/lelux-utiliteetit/commit/d27f5fe770025e456fbd33b87a96968f34c455ed
Karel if/when considering merge the branch name is: getopt
--
Sami Kerola
http://www.iki.fi/kerolasa/
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] getops: improve getopt-parse.bash example
2016-07-27 15:20 ` Sami Kerola
@ 2016-08-02 14:09 ` Karel Zak
0 siblings, 0 replies; 4+ messages in thread
From: Karel Zak @ 2016-08-02 14:09 UTC (permalink / raw)
To: kerolasa; +Cc: Benno Schulenberg, Util-Linux
On Wed, Jul 27, 2016 at 04:20:32PM +0100, Sami Kerola wrote:
> On 27 July 2016 at 12:15, Benno Schulenberg <bensberg@justemail.net> wrote:
> >
> > In the subject line: s/ops/opt/.
> >
> > On Wed, Jul 27, 2016, at 12:34, Sami Kerola wrote:
> >> --- a/misc-utils/getopt-parse.bash
> >> +++ b/misc-utils/getopt-parse.bash
> >> @@ -3,45 +3,73 @@
> >> # 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
> >
> > When here anyway, maybe fix a typo: s/An/A/.
> > Add a missing period: s/)/)./.
> > And adjust for the times: s/new //.
> >
> >> -# as parse.tcsh
> >> +# as getopt-parse.tcsh
> >
> > Also add period: s/tcsh/tcsh./
> >
> > Benno
>
> Thanks Benno.
>
> The example file banner is updated to both of them. I also changed the
> example script
> to call itself as script rather than a program.
>
> https://github.com/kerolasa/lelux-utiliteetit/commit/d27f5fe770025e456fbd33b87a96968f34c455ed
>
> Karel if/when considering merge the branch name is: getopt
Merged, thanks.
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-08-02 14:16 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-27 10:34 [PATCH] getops: improve getopt-parse.bash example Sami Kerola
2016-07-27 11:15 ` Benno Schulenberg
2016-07-27 15:20 ` Sami Kerola
2016-08-02 14:09 ` Karel Zak
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.