lstipakov
lstipakov

Reputation: 3238

Integer comparison in bash

I need to implement something like:

if [ $i -ne $hosts_count - 1] ; then
    cmd="$cmd;"
fi

But I get

./installer.sh: line 124: [: missing `]'

What I am doing wrong?

Upvotes: 4

Views: 8851

Answers (4)

Mark Edgar
Mark Edgar

Reputation: 4797

In bash, you can avoid both [ ] and [[ ]] by using (( )) for purely arithmetic conditions:

if (( i != hosts_count - 1 )); then
  cmd="$cmd"
fi

Upvotes: 3

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798536

  1. The ] must be a separate argument to [.
  2. You're assuming you can do math in [.

    if [ $i -ne $(($hosts_count - 1)) ] ; then
    

Upvotes: 4

pepoluan
pepoluan

Reputation: 6780

The command [ can't handle arithmetics inside its test. Change it to:

if [ $i -ne $((hosts_count-1)) ]; then

Edit: what @cebewee wrote is also true; you must put a space in front of the closing ]. But, just doing that will result in yet another error: extra argument '-'

Upvotes: 8

Lars Noschinski
Lars Noschinski

Reputation: 3667

The closing ] needs to be preceded by a space, i.e. write

if [ $i -ne $hosts_count - 1 ] ; then
    cmd="$cmd;"
fi

Upvotes: 0

Related Questions