Skip to main content

Parameters

Arguments to a script are called parameters. You can access the parameters using the special variables $0, $1, $2, and so forth. $0 contains the name of the script, $1 contains the first parameter, $2 contains the second parameter, and so forth.

The special variable $# contains the total number of parameters.

Here is a simple script which shows you what parameters have been received:

#!/usr/bin/bash​
echo "Number of parameters: $#"​
echo "Parameter 0: $0"​
echo "Parameter 1: $1"​
echo "Parameter 2: $2"​
echo "Parameter 3: $3"​
echo "Parameter 4: $4"

When you run this script with three parameters (red, green, and blue), you get this output:

$ ./params red green blue​
Number of parameters: 3​
Parameter 0: ./params
Parameter 1: red​
Parameter 2: green​
Parameter 3: blue​
Parameter 4:

The shift command discards parameter $1 and moves each of the remaining parameters to the previous position (so the value in parameter $2 is moved to $1, and $3 is moved to $2). We can modify the previous script to demonstrate this:

$ cat params2​
#!/usr/bin/bash​
echo "Number of parameters: $#"​

echo "Parameter 0: $0"​
echo "Parameter 1: $1"​
echo "Parameter 2: $2"​
echo "Parameter 3: $3"​
echo "Parameter 4: $4"

echo "---- Performing shift ----"
shift

echo "Parameter 0: $0"​
echo "Parameter 1: $1"​
echo "Parameter 2: $2"​
echo "Parameter 3: $3"​
echo "Parameter 4: $4"

$ ./params2 red green blue
Number of parameters: 3
Parameter 0: ./params2
Parameter 1: red
Parameter 2: green
Parameter 3: blue
Parameter 4:
---- Performing shift ----
Parameter 0: ./params2
Parameter 1: green
Parameter 2: blue
Parameter 3:
Parameter 4:

The shift command is useful for looping through parameters, and for accessing parameters higher than number 9.