BillPull
BillPull

Reputation: 7013

Check that there are at least two arguments given in a bash script

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

Answers (2)

Andrew
Andrew

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

Laurence Gonsalves
Laurence Gonsalves

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

Related Questions