You're reading from Linux Command Line and Shell Scripting Bible - Third Edition
Passing Parameters
The most basic method of passing data to your shell script is to use command line parameters. Command line parameters allow you to add data values to the command line when you execute the script:
$ ./addem 10 30
This example passes two command line parameters (10
and 30
) to the script addem
. The script handles the command line parameters using special variables. The following sections describe how to use command line parameters in your bash shell scripts.
Reading parameters
The bash shell assigns special variables, called positional parameters, to all of the command line parameters entered. This includes the name of the script the shell is executing. The positional parameter variables are standard numbers, with $0
being the script's name, $1
being the first parameter, $2
being the second parameter, and so on, up to $9
for the ninth parameter.
Here's a simple example of using one command line parameter in a shell script:
$ cat test1.sh
#!/bin/bash
# using...
Using Special Parameter Variables
A few special bash shell variables track command line parameters. This section describes what they are and how to use them.
Counting parameters
As you saw in the last section, you should verify command line parameters before using them in your script. For scripts that use multiple command line parameters, this checking can get tedious.
Instead of testing each parameter, you can count how many parameters were entered on the command line. The bash shell provides a special variable for this purpose.
The special $#
variable contains the number of command line parameters included when the script was run. You can use this special variable anywhere in the script, just like a normal variable:
$ cat test8.sh
#!/bin/bash
# getting the number of parameters
#
echo There were $# parameters supplied.
$
$ ./test8.sh
There were 0 parameters supplied.
$
$ ./test8.sh 1 2 3 4 5
There were 5 parameters supplied.
$
$ ./test8.sh 1 2 3 4 5 6 7 8 9 10
There were 10 parameters...
Being Shifty
Another tool you have in your bash shell tool belt is the shift
command. The bash shell provides the shift
command to help you manipulate command line parameters. The shift
command literally shifts the command line parameters in their relative positions.
When you use the shift
command, it moves each parameter variable one position to the left by default. Thus, the value for variable $3
is moved to $2
, the value for variable $2
is moved to $1
, and the value for variable $1
is discarded (note that the value for variable $0
, the program name, remains unchanged).
This is another great way to iterate through command line parameters, especially if you don't know how many parameters are available. You can just operate on the first parameter, shift the parameters over, and then operate on the first parameter again.
Here's a short demonstration of how this works:
$ cat test13.sh
#!/bin/bash
# demonstrating the shift command
echo
count=1
while [ -n "$1" ]
do
...
Working with Options
If you've been following along in the book, you've seen several bash commands that provide both parameters and options. Options are single letters preceded by a dash that alter the behavior of a command. This section shows three methods for working with options in your shell scripts.
Finding your options
On the surface, there's nothing all that special about command line options. They appear on the command line immediately after the script name, just the same as command line parameters. In fact, if you want, you can process command line options the same way you process command line parameters.
Processing simple options
In the test13.sh
script earlier, you saw how to use the shift
command to work your way down the command line parameters provided with the script program. You can use this same technique to process command line options.
As you extract each individual parameter, use the case
statement (see Chapter 12) to determine when a parameter is...
Standardizing Options
When you create your shell script, obviously you're in control of what happens. It's completely up to you as to which letter options you select to use and how you select to use them.
However, a few letter options have achieved a somewhat standard meaning in the Linux world. If you leverage these options in your shell script, your scripts will be more user-friendly.
Table 14.1 shows some of the common meanings for command line options used in Linux.
Table 14.1 Common Linux Command Line Options
Option | Description |
-a |
Shows all objects |
-c |
Produces a count |
-d |
Specifies a directory |
-e |
Expands an object |
-f |
Specifies a file to read data from |
-h |
Displays a help message for the command |
-i |
Ignores text case |
-l |
Produces a long format version of the output |
-n |
Uses a non-interactive (batch) mode |
-o |
Specifies an output file to redirect all output to |
-q |
Runs in quiet mode |
-r |
Processes directories and files recursively |
-s |
Runs in silent mode... |
Getting User Input
Although providing command line options and parameters is a great way to get data from your script users, sometimes your script needs to be more interactive. Sometimes you need to ask a question while the script is running and wait for a response from the person running your script. The bash shell provides the read
command just for this purpose.
Reading basics
The read
command accepts input either from standard input (such as from the keyboard) or from another file descriptor. After receiving the input, the read
command places the data into a variable. Here's the read
command at its simplest:
$ cat test21.sh
#!/bin/bash
# testing the read command
#
echo -n "Enter your name: "
read name
echo "Hello $name, welcome to my program. "
#
$
$ ./test21.sh
Enter your name: Rich Blum
Hello Rich Blum, welcome to my program.
$
That's pretty simple. Notice that the echo
command that produced the prompt uses the -n
option. This suppresses the newline...
Summary
This chapter showed three methods for retrieving data from the script user. Command line parameters allow users to enter data directly on the command line when they run the script. The script uses positional parameters to retrieve the command line parameters and assign them to variables.
The shift
command allows you to manipulate the command line parameters by rotating them within the positional parameters. This command allows you to easily iterate through the parameters without knowing how many parameters are available.
You can use three special variables when working with command line parameters. The shell sets the $#
variable to the number of parameters entered on the command line. The $*
variable contains all the parameters as a single string, and the $@
variable contains all the parameters as separate words. These variables come in handy when you're trying to process long parameter lists.
Besides parameters, your script users can use command line options to pass information...