Hi.
In solving problems, I find it most useful to search for solutions before inventing my own. I keep a list of notes and sources for command-line-processing, posted below. You may want to consider items 4 and 5 below, neither of which is trivial to use. However, because of your requirement to run on all shells, I think you will probably have to do your own processing with the lowest common denominator features of the Bourne shell -- no additional features such as found on bash
, ksh
, zsh
[/ICODE], etc. Of course, you could choose the most-feature-rich shell, possibly zsh
or pwsh
, and write simple driver scripts for the other shells, provided you can install zsh
/ pwsh
on all systems that you need. The perl
modules have extensive support for command-line options, so one could write a perl
code that processed arguments, and then have the perl
code call a vanilla shell script with simple arguments.
Good luck, I'd be interested in how you solve this ... cheers, drl
Process command-line (CLI) options, arguments
1) getopts, builtin, bash, ksh, zsh
http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line-options
Also, search for option processing, including:
http://mywiki.wooledge.org/ComplexOptionParsing
2) perl: many, including libgetopt-euclid-perl, which
creates man page, help automatically
3) getopt, enhanced getopts, part of the util-linux, allows GNU "--"
Examples: /usr/share/doc/util-linux/examples, 2016.03.27
4) argp.sh, wrapper for getopt, creates man and help (text, XML), etc.
Allows mixed options and arguments.
Compiled argp.c -> argp for faster execution.
https://sourceforge.net/projects/argpsh/, 2016.03.27
5) shflags, wrapper for getopt, creates help, allow mixed options
and arguments
https://github.com/kward/shflags, 2016.08.01
6) ksh getopts, enhanced, process GNU "--", creates man, help, etc.
Examples: Learning the Korn Shell, O'Reilly, 2nd, p 380ff
7) zsh zparseopts
man zshmodules, part of zshutil
8) getopts_long.sh, a getopts that supports long options à la GNU for POSIX
shells
http://stchaz.free.fr/getopts_long.sh
9) Suggested option names:
http://www.shelldorado.com/goodcoding/cmdargs.html#flagnames