SiB SiB - 1 month ago 16
Bash Question

Shell Script : is mixing getopts with positional parameters possible?

I want to design a shell script as a wrapper for a couple of scripts. I would like to specify parameters for

myshell.sh
using
getopts
and pass the remaining parameters in the same order to the script specified.

If
myshell.sh
is executed like:

myshell.sh -h hostname -s test.sh -d waittime param1 param2 param3

myshell.sh param1 param2 -h hostname param3 -d waittime -s test.sh

myshell.sh param1 -h hostname -d waittime -s test.sh param2 param3


All of the above should be able to call as

test.sh param1 param2 param3


Is it possible to utilize the options parameters in the
myshell.sh
and post remaining parameters to underlying script?

Answer

Sorry for commenting on an old thread, but thought I'd post for those, like me who were searching on how to do this...

I wanted to do something similar to the OP, and I found the relevant information I required here and here

Essentially if you want to do something like:

script.sh [options] ARG1 ARG2

Then get your options like this:

while getopts "h:u:p:d:" flag; do
case "$flag" in
    h) HOSTNAME=$OPTARG;;
    u) USERNAME=$OPTARG;;
    p) PASSWORD=$OPTARG;;
    d) DATABASE=$OPTARG;;
esac
done

And then you can get your positional arguments like this:

ARG1=${@:$OPTIND:1}
ARG2=${@:$OPTIND+1:1}

More information and details are available through the link above.

Hope that helps!!