ЕСЛИ внутри UNTIL. Не работает никаких предложений! [закрыто]

[F1]
1
задан 9 December 2015 в 16:53

3 ответа

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

Должен длительный ответ.

Посмотрите еще раз на ошибку message.

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

Эта левая квадратная скобка - это фактически команда, которая живет на вашей файловой системе, а не синтаксический элемент, как многие ожидали бы. Как и большинство команд в * nix, у него есть справочная страница, которую вы можете проверить с помощью:

man [

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

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

Обратите внимание, что [и тест - это одна и та же команда, и вы, вероятно, увидите их обоих в своей карьеры.

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

Я считаю, что опция bash -x очень полезна при отладке сценариев оболочки. Когда используется, bash эхо всех команд перед их запуском.

$ 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
ответ дан 23 May 2018 в 15:09

Заменить

if [ $selected -ne $team ]

с

if [ $selected != $team ]

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

0
ответ дан 23 May 2018 в 15:09

есть ошибка в сравнении строк:

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

0
ответ дан 23 May 2018 в 15:09

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

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