2012-02-15 2 views
9

У меня есть этот скриптне найден при сравнении строки

#!/bin/sh   
if [ $# -ne 3 ] ; then 
      echo "param 1, param2, and A or B " 
      exit 1; 

    elif [ $# -eq 3 ]; then 
        if [$3 = "A"] ; then 
            echo "A" 
        elif [$3 = "B"]; then 
            echo "B" 
        fi 

fi 

Это в основном проверка если параметр 3 А или В, и сделать эхо. Но она возвращает:

./test.sh: line 6: [A: command not found 
./test.sh: line 8: [A: command not found 

Я пытался использовать -eq для сравнения, но он по-прежнему не работает. Как я могу исправить эту проблему?

+0

Вам не нужен 'elif [$ # -eq 3]; затем 'line, как вы знаете, что' $ # 'равно 3 от вашего первого теста. Тогда вы могли бы избежать одного уровня отступа и 'fi', заменяя' if [$ 3 = "A"]; затем '' elif [$ 3 = "A"]; затем'. – jfg956

ответ

25

Я уверен, что это произошло раньше, но - [ - это на самом деле команда. Вам понадобится место после [, чтобы оболочка могла его найти.

+0

спасибо, я приму это после 9 минут (поскольку переполнение стека не позволяет мне еще принять) – heike

+5

Причина, по которой вам нужно пространство, заключается в том, что оболочка токенизирует линию, разбивая ее там, где есть одно или несколько пробелов и/или вкладки. Если у вас нет пробела после [тогда это не отдельный токен. Аналогично для], хотя команда проверки игнорирует эту, но она будет мешать сравнению, если перед ней нет места –

Смежные вопросы