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.\n" >&2
printf "%b" "usage: myscript file1 op file2\n" >&2
exit 1
elif (( $# > 3 ))
then
printf "%b" "Error. Too many arguments.\n" >&2
printf "%b" "usage: myscript file1 op file2\n" >&2
exit 2
else
printf "%b" "Argument count correct. Proceeding...\n"
fiAnd 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, ...
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