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...
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.
18.189.170.134