How to include custom command options in a bash script with $1 and $2?

I have a script myscript.sh

#!/bin/sh

echo $1 $2

which is used something like …

./myscript.sh foo bar

which gives me an output of …

foo bar

but how can i make this script include custom command options? for example …

./myscript.sh -a foo and corespond to $1

and

./myscript.sh -b bar and corespond to $2

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

You should to use man 1 bash:

Small example:

#!/bin/bash

while getopts "a:b:" opt      # get options for -a and -b ( ':' - option has an argument )
do
    case $opt in
        a) echo "Option a: $opt, argument: $OPTARG";;
        b) echo "Option b: $opt, argument: $OPTARG";;
    esac
done

Solution 2

Since you are listing bash as the shell used, type:

$ help getopts

Which will print something like:

getopts: getopts optstring name [arg] Parse option arguments.

Getopts is used by shell procedures to parse positional parameters as options.

OPTSTRING contains the option letters to be recognized; if a letter is followed by a
colon, the option is expected to have an argument, which should be separated from it by white space.

Each time it is invoked, getopts will place 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 shell 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 shell variable OPTARG.

Getopts normally parses the positional parameters ($0 – $9), but if more arguments are given, they are parsed instead.

Related:

  1. Getopts tutorial.
  2. getopts How to pass command line options
  3. How to use getopts in bash
  4. Getopt, getopts or manual parsing?

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply