Краткий ответ: в строке 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
Заменить
if [ $selected -ne $team ]
с
if [ $selected != $team ]
Оператор -ne может сравнивать только числа, а не строки.
есть ошибка в сравнении строк:
Ошибка: if [ $selected -ne $team ] это целочисленное сравнение для строк: if [ $selected != $team ]