Counting Arguments

Problem

You need to know with how many parameters the script was invoked.

Solution

Use the shell built-in variable ${#}. Here’s some scripting to enforce an exact count of three arguments:

#!/usr/bin/env bash
# cookbook filename: check_arg_count
#
# Check for the correct # of arguments:
# Use this syntax or use: if [ $# -lt 3 ]
if (( $# < 3 ))
then
    printf "%b" "Error. Not enough arguments.
" >&2
    printf "%b" "usage: myscript file1 op file2
" >&2
    exit 1
elif (( $# > 3 ))
then
    printf "%b" "Error. Too many arguments.
" >&2
    printf "%b" "usage: myscript file1 op file2
" >&2
    exit 2
else
    printf "%b" "Argument count correct. Proceeding...
"
fi

And here is what it looks like when we run it, once with too many arguments and once with the correct number of arguments:

$ ./myscript myfile is copied into yourfile
Error. Too many arguments.
usage: myscript file1 op file2

$ ./myscript myfile copy yourfile
Argument count correct. Proceeding...

Discussion

After the opening comments (always a helpful thing to have in a script), we have the if test to see whether the number of arguments supplied (found in $#) is greater than three. If so, we print an error message, remind the user of the correct usage, and exit.

The output from the error messages are redirected to standard error. This is in keeping with the intent of standard error as the channel for all error messages.

The script also has a different return value depending on the error that was detected. While not that significant here, it is useful for any script that might be invoked by other scripts, so that there is a programmatic way not only to detect failure (non-zero exit value), but to distinguish between error types.

One word of caution: don’t confuse ${#} with ${#VAR} or even ${VAR#alt} just because they all use the # inside of braces. The first gives the number of arguments the second gives the length of the value in the variable VAR, and the third does a certain kind of substitution.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.17.184.90