In my last article I shared the steps to delete content or element of an array from another array, now in this article I will share examples to pass multiple parameters in shell script. Now assuming you wish to write a shell script which needs multiple input arguments for performing the task. So it becomes little tricky to handle such scenarios. So to pass multiple parameters in shell script we will use while loop in our example.

How to pass multiple parameters in shell script in Linux

 

Steps to pass multiple parameters in shell script

This is our first script which only has a show_usage function which contains a list of input argument which the script will support. In this example we will use if condition to collect the input argument and perform the action accordingly.

#!/bin/bash
##
# @Description: Steps to pass multiple parameters in shell script
# Take single argument
##

function show_usage (){
    printf "Usage: $0 [options [parameters]]\n"
    printf "\n"
    printf "Options:\n"
    printf " -n|--number, Print number\n"
    printf " -s|--single [rpm_name], Print rpm version\n"
    printf " -m|--mdstat, Print /proc/mdstst (Update)\n"
    printf " -c|--collect, Collect rpm list to log file\n"
    printf " -t|--timeout, Collect timeout\n"
    printf " -p|--path, Provide the path\n"
    printf " -h|--help, Print help\n"

return 0
}

if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]];then
    show_usage
else
    echo "Incorrect input provided"
    show_usage
fi

So now for this script if we give --help or -h, the script will execute the show_usage function. Now even if you provide any other argument as an input, the script will assume that incorrect input was provided and will again execute show_usage function.

Output:

# /tmp/collect_input.sh -hh
Incorrect input provided
Usage: /tmp/collect_input.sh [options [parameters]]

Options:
-n|--number, Print number
-s|--single [rpm_name], Print rpm version
-m|--mdstat, Print /proc/mdstst (Update)
-c|--collect, Collect rpm list to log file
-t|--timeout, Collect timeout
-p|--path, Provide the path
-h|--help, Print help

Now next we will modify our script to use case instead of if. For such situations it is good to use case rather than if condition. Here the show_usage function remains the same.

case $1 in
     --number|-n)
         shift
         echo "You entered number as: $1"
         shift
         ;;
     --collect|-c)
         shift
         echo "You entered collect as: $1"
         ;;
     --timeout|-t)
        shift
        echo "You entered timeout as:"
         ;;
     *)
        show_usage
        ;;
esac

Now let us try to execute our script with single input argument

Output:

# /tmp/collect_input.sh -n 12
You entered number as: 12

So it worked, now let us try to execute our script with two input argument

# /tmp/collect_input.sh -n 12 -t 34
You entered number as: 12

As you see even if I gave two arguments the script was able to read only the first argument. To handle this we need to use a while loop.

while [ ! -z "$1" ]; do
  case "$1" in
     --number|-n)
         shift
         echo "You entered number as: $1"
         ;;
     --collect|-c)
         shift
         echo "You entered collect as: $1"
         ;;
     --timeout|-t)
        shift
        echo "You entered timeout as: $1"
         ;;
     *)
        show_usage
        ;;
  esac
shift
done

Here I have added an extra while loop which will re-run the case statement for all the input parameters provided to the shell script

Let us try to pass multiple parameters in shell script

# /tmp/collect_input.sh -n 12 -t 34
You entered number as: 12
You entered timeout as: 34

For three arguments

# /tmp/collect_input.sh -n 12 -t 34 -c value
You entered number as: 12
You entered timeout as: 34
You entered collect as: value

So now we are able to pass multiple parameters in shell script.

Lastly I hope the steps to pass multiple parameters in shell script on Linux was helpful. So, let me know your suggestions and feedback using the comment section.

 

Leave a Reply

Your email address will not be published. Required fields are marked *