Re: [ILUG] what does this shell script mean

From: Dave Neary (dave.neary at domain palamon.ie)
Date: Wed 09 May 2001 - 12:35:17 IST


hrishy samant wrote:
>
> hey thanks buddy can you also if possible tell me what
> is getopts all about.

"man getopts" tells you that it's a bash builtin (there may also a
getopts in section 3, which does something similar for C programs).

"man bash" followed by a search for getopts yields the passage below
(sorry for the long c&p):

There's an Advanced-Bash-Scripting-HOWTO which explains in practical
terms how to use this.

Basically 'while getopts "a:bc:" curr_option; do ... done' is the
general form. The colons mean that a and c expect arguments - this pops
one arg at a time off the argument stack and stores it in curr_option,
and for options expecting an argument, the option is put in $OPTARG. If
you preceed the options with a :, then a - is obligatory before the
arguments.

If this isn't enough information for you, God help you ;-)

Cheers,
Dave.

   getopts optstring name [args]
              getopts is used by shell procedures to parse posi­
              tional parameters. optstring contains the option
              characters to be recognized; if a character is fol­
              lowed by a colon, the option is expected to have an
              argument, which should be separated from it by
              white space. The colon and question mark charac­
              ters may not be used as option characters. Each
              time it is invoked, getopts places the next option
              in the shell variable name, initializing name if it
              does not exist, and the index of the next argument
              to be processed into the variable OPTIND. OPTIND
              is initialized to 1 each time the shell or a shell
              script is invoked. When an option requires an
              argument, getopts places that argument into the
              variable OPTARG. The shell does not reset OPTIND
              automatically; it must be manually reset between
              multiple calls to getopts within the same shell
              invocation if a new set of parameters is to be
              used.

              When the end of options is encountered, getopts
              exits with a return value greater than zero.
              OPTIND is set to the index of the first non-option
              argument, and name is set to ?.

              getopts normally parses the positional parameters,
              but if more arguments are given in args, getopts
              parses those instead.

              getopts can report errors in two ways. If the
              first character of optstring is a colon, silent
              error reporting is used. In normal operation diag­
              nostic messages are printed when invalid options or
              missing option arguments are encountered. If the
              variable OPTERR is set to 0, no error messages will
              be displayed, even if the first character of opt­
              string is not a colon.

              If an invalid option is seen, getopts places ? into
              name and, if not silent, prints an error message
              and unsets OPTARG. If getopts is silent, the
              option character found is placed in OPTARG and no
              diagnostic message is printed.

              If a required argument is not found, and getopts is
              not silent, a question mark (?) is placed in name,
              OPTARG is unset, and a diagnostic message is
              printed. If getopts is silent, then a colon (:) is
              placed in name and OPTARG is set to the option
              character found.

              getopts returns true if an option, specified or
              unspecified, is found. It returns false if the end
              of options is encountered or an error occurs.

-- 
David Neary,               E-Mail dave.neary at domain palamon.ie
Palamon Technologies Ltd.  Phone +353-1-634-5059


This archive was generated by hypermail 2.1.6 : Thu 06 Feb 2003 - 13:10:14 GMT