Using Parameters in a Shell Script
Problem
You also want users to be able to invoke your script with a parameter. You could require that users set a shell variable, but that seems clunky. You also need to pass data to another script. You could agree on environment variables, but that ties the two scripts together too closely.
Solution
Use command-line parameters. Any words put on the command line of a shell script are available to the script as numbered variables:
# simple shell script echo $1
The script will echo the first parameter supplied on the command line when it is invoked. Here it is in action:
$ cat simplest.sh
# simple shell script
echo ${1}
$ ./simplest.sh you see what I mean
you
$ ./simplest.sh one more time
one
$Discussion
The other parameters are available as ${2}, ${3}, ${4}, ${5}, and so on. You don’t
need the braces for the single-digit numbers, except to separate the
variable name from the surrounding text. Typical scripts have only a
handful of parameters, but when you get to ${10} you better use the braces or else the
shell will interpret that as ${1}
followed immediately by the literal string 0 as we see here:
$ cat tricky.sh
echo $1 $10 ${10}
$ ./tricky.sh I II III IV V VI VII VIII IX X XI
I I0 X
$The tenth argument has the value X but if you write $10 in your script, then the shell will give
you $1, the first parameter, followed
immediately by a zero, the literal character that you put next to the
$1 in your echo statement.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access