Reputation: 7013
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?
Upvotes: 47
Views: 65220
Reputation: 946
Going 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.
Upvotes: 30
Reputation: 143344
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
Upvotes: 80