I am trying to write a script that mimics cp where there is a source and destination input. How can I count the number of arguments given on the command line?
For example:
./myscript src dest
How can I check that at least 2 things were given?
Use the $# special variable. Its value is the number of arguments. So if you have a script that contains only:
echo $#
and execute it like this:
thatscript foo bar baz quux
It'll print 4.
In your case you may want to do something like:
if [ $# -lt 2 ]; then
# TODO: print usage
exit 1
fi
~/.bashrc use return rather than exit 1Going by the requirement from the question that the arguments should contain "at least 2 things", I think it might be more accurate to check:
if (( $# < 2 )); then
# TODO: print usage
exit 1
fi
Using arithmetic expansion (( )) will prevent this from hitting exit 1 for any value not equal to 2.
If you use if [ $# -ne 2 ]; it will trigger the conditional for any number of arguments other than 2.
Edit: It looks like the accepted answer has been updated to include an equivalent (and more portable?) example of this.