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" 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, ...
Get bash Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.