IF внутри UNTIL. Не работает любые предложения! [closed]

selected=MU
team=xyz
until [ $selected = $team ]
do
    echo "Guess the best team:
    Manchester United->MU
    Arsenal      ->AR
    Chelsea      ->CH"
    read team
    if [ $selected -ne $team ]
        then
        echo "You are wrong!!! Try again"
    fi
done
echo "Correct!! Manchester united is the best"
0
задан 9 December 2015 в 15:53

4 ответа

Я попробовал его, сначала я добрался:

line 12: [: MU: integer expression expected

, так как это пыталось сравнить строки, но ожидаемые целые числа. Используя == и != работы для строк, или как ниже также.

переменные Заключения в кавычки являются хорошей идеей в случае, если кто-то вводит в пространстве, Вы получите другую ошибку:

line 4: [: too many arguments

Так в основном, Вам нужно

until [ "$selected" == "$team" ]
...
   if [ ! "$selected" == "$team" ]
1
ответ дан 30 September 2019 в 02:04

Замена

if [ $selected -ne $team ]

с

if [ $selected != $team ]

-ne оператор может только сравнить числа, не строки.

0
ответ дан 30 September 2019 в 02:04

Короткий ответ: существует ошибка в строке 10. Оператор-ne для целых чисел! = для строк.

ответ Long следует.

Взгляд снова на сообщение об ошибке.

test.sh: line 10: [: MU: integer expression expected

, Что левая квадратная скобка является на самом деле командой, которая живет на Вашей файловой системе, не синтаксическом элементе, поскольку многие ожидали бы. Поскольку большинство команд в *отклоняет, это имеет страницу справочника, с которой можно свериться:

man [

, где Вы найдете список всех тестов, он в состоянии сделать для Вас:

...
STRING1 != STRING2
  the strings are not equal
...
INTEGER1 -ne INTEGER2
  INTEGER1 is not equal to INTEGER2
...

Примечание, что [ и тест та же команда и Вы, вероятно, собираетесь видеть их обоих в течение своей карьеры.

сценарии Shell могут быть очень твердыми сначала, но не становятся нежелательными, потому что это стоит того.

я нахожу, что опция удара-x очень полезна при отладке сценариев оболочки. При использовании удар повторяет все команды прежде на самом деле выполнить их.

$ bash -x test.sh
+ selected=MU
+ team=xyz
+ '[' MU = xyz ']'
+ echo 'Guess the best team:
    Manchester United->MU
    Arsenal      ->AR
    Chelsea      ->CH' Guess the best team:
    Manchester United->MU
    Arsenal      ->AR
    Chelsea      ->CH
+ read team MU
+ '[' MU -ne MU ']' test.sh: line 10: [: MU: integer expression expected
+ '[' MU = MU ']'
+ echo 'Correct!! Manchester united is the best' Correct!! Manchester united is the best
2
ответ дан 30 September 2019 в 02:04

существует ошибка по сравнению со строками:

Ошибка: if [ $selected -ne $team ] это - целочисленное сравнение для строк: if [ $selected != $team ]

0
ответ дан 30 September 2019 в 02:04

Другие вопросы по тегам:

Похожие вопросы: