Целочисленное сравнение в bash - PullRequest
4 голосов
/ 10 марта 2011

Мне нужно реализовать что-то вроде:

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

Но я получаю

. / Installer.sh: строка 124: [: отсутствует `] '

Что я делаю не так?

Ответы [ 4 ]

8 голосов
/ 10 марта 2011

Команда [ не может обработать арифметику внутри своего теста. Измените его на:

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

Редактировать: то, что написал @cebewee, также верно; Вы должны поставить пробел перед закрывающей ]. Но только выполнение этого приведет к еще одной ошибке: extra argument '-'

4 голосов
/ 10 марта 2011
  1. ] должен быть отдельным аргументом для [.
  2. Вы предполагаете, что можете сделать математику в [.

    if [ $i -ne $(($hosts_count - 1)) ] ; then
    
3 голосов
/ 10 марта 2011

В bash вы можете избежать [ ] и [[ ]], используя (( )) для чисто арифметических условий:

if (( i != hosts_count - 1 )); then
  cmd="$cmd"
fi
0 голосов
/ 10 марта 2011

Закрытию ] должен предшествовать пробел, то есть запись

if [ $i -ne $hosts_count - 1 ] ; then
    cmd="$cmd;"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...