How to use positional parameters

From Linux Shell Scripting Tutorial - A Beginner's handbook
Revision as of 22:49, 29 March 2016 by Admin (talk | contribs) (Text replacement - "<source lang="bash">" to "<syntaxhighlight lang="bash" >")
Jump to navigation Jump to search

← Shell command line parametersHomeParameters Set by the Shell →

All command line parameters ( positional parameters ) are available via special shell variable $1, $2, $3,...,$9.

How Do I Access Command-Line Arguments

Create a simple shell script called cmdargs.sh: <syntaxhighlight lang="bash" >#!/bin/bash echo "The script name : $0" echo "The value of the first argument to the script : $1" echo "The value of the second argument to the script : $2" echo "The value of the third argument to the script : $3" echo "The number of arguments passed to the script : $#" echo "The value of all command-line arguments (\$* version) : $*" echo "The value of all command-line arguments (\$@ version) : $@" </source> Save and close the file. Rut it as follows: <syntaxhighlight lang="bash" >chmod +x cmdargs.sh ./cmdargs.sh bmw ford toyota</source> Sample outputs:

The script name : ./cmdargs.sh
The value of the first argument to the script : bmw
The value of the second argument to the script : ford
The value of the third argument to the script : toyota
The number of arguments passed to the script : 3
The value of all command-line arguments ($* version) : bmw ford toyota
The value of all command-line arguments ($@ version) : bmw ford toyota

Try the following examples: <syntaxhighlight lang="bash" >ls /tmp ./math 10 + 3 ~/scripts/addzone cyberciti.com ~/scripts/adddomain cyberciti.biz '74.86.48.99' '2607:f0d0:1002:11::4' /etc/init.d/named reload /usr/local/etc/rc.d/jail restart cyberciti.biz</source>

Shell script name ($0) Total number of arguments ($#) Actual Command line argument ($1,..,$9)
ls 1 /tmp
./math 3 10, +, and 3
~/scripts/addzone 1 cyberciti.com
~/scripts/adddomain 3 cyberciti.biz, 74.86.48.99, and 2607:f0d0:1002:11::4
/etc/init.d/named reload 1 reload
/usr/local/etc/rc.d/jail 2 restart, and cyberciti.biz

A Note About $@ and $*

  • $@ expanded as "$1" "$2" "$3" ... "$n"
  • $* expanded as "$1y$2y$3y...$n", where y is the value of $IFS variable i.e. "$*" is one long string and $IFS act as an separator or token delimiters.

Example: The Difference Between $@ and $*

Create a shell script called pizza.sh: <syntaxhighlight lang="bash" >#!/bin/bash IFS=", " echo "* Displaying all pizza names using \$@" echo "$@" echo

echo "* Displaying all pizza names using \$*" echo "$*"</source> Save and close the file. Run it as follows: <syntaxhighlight lang="bash" >chmod +x pizza.sh ./pizza.sh Margherita Tomato Panner Gourmet</source> Sample outputs:

* Displaying all pizza names using $@
Margherita Tomato Panner Gourmet

*Displaying all pizza names using $*
Margherita,Tomato,Panner,Gourmet

← Shell command line parametersHomeParameters Set by the Shell →