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"
Я попробовал его, сначала я добрался:
line 12: [: MU: integer expression expected
, так как это пыталось сравнить строки, но ожидаемые целые числа. Используя ==
и !=
работы для строк, или как ниже также.
переменные Заключения в кавычки являются хорошей идеей в случае, если кто-то вводит в пространстве, Вы получите другую ошибку:
line 4: [: too many arguments
Так в основном, Вам нужно
until [ "$selected" == "$team" ]
...
if [ ! "$selected" == "$team" ]
Замена
if [ $selected -ne $team ]
с
if [ $selected != $team ]
-ne
оператор может только сравнить числа, не строки.
Короткий ответ: существует ошибка в строке 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
существует ошибка по сравнению со строками:
Ошибка: if [ $selected -ne $team ]
это - целочисленное сравнение для строк: if [ $selected != $team ]