47

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?

2 Answers 2

81

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
Sign up to request clarification or add additional context in comments.

1 Comment

If you put it in your ~/.bashrc use return rather than exit 1
30

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.