Specify command line arguments like name=value pairs for shell script

Neeraj picture Neeraj · Mar 31, 2011 · Viewed 20.1k times · Source

Is it possible to pass command line arguments to shell script as name value pairs, something like

myscript action=build module=core

and then in my script, get the variable like $action and process it?

I know that $1....and so on can be used to get variables, but then won't be name value like pairs. Even if they are, then the developer using the script will have to take care of declaring variables in the same order. I do not want that.

Answer

JRichardsz picture JRichardsz · Mar 24, 2017

This worked for me:

for ARGUMENT in "$@"
do

    KEY=$(echo $ARGUMENT | cut -f1 -d=)
    VALUE=$(echo $ARGUMENT | cut -f2 -d=)   

    case "$KEY" in
            STEPS)              STEPS=${VALUE} ;;
            REPOSITORY_NAME)    REPOSITORY_NAME=${VALUE} ;;     
            *)   
    esac    


done

echo "STEPS = $STEPS"
echo "REPOSITORY_NAME = $REPOSITORY_NAME"

Usage

bash my_scripts.sh  STEPS="ABC" REPOSITORY_NAME="stackexchange"

Console result :

STEPS = ABC
REPOSITORY_NAME = stackexchange

STEPS and REPOSITORY_NAME are ready to use in the script.

It does not matter what order the arguments are in.

HTH