Passing parameters with options

To pass parameters along with options simultaneously, you must separate them with a double dash, like this:

$ ./script1.sh -a -b -c -- p1 p2 p3

Using the previous technique, we can iterate over the options till we reach the double dash, then we will iterate over the parameters:

#!/bin/bash
while [ -n "$1" ]
do
case "$1" in
-a) echo "-a option found" ;;
-b) echo "-b option found";;
-c) echo "-c option found" ;;
--) shift
break ;;
*) echo "Option $1 not an option";;
esac
shift
done
#iteration over options is finished here.
#iteration over parameters started.
num=1
for param in $@
do
echo "#$num: $param"
num=$(( $num + 1 ))
done

Now if we run it with parameters and options combined, we should see a list of options and another list of parameters:

$ ./script1.sh -a -b -c -- p1 p2 p3

As you can see, anything passed after the double dash is treated as a parameter.