<Предыдущая | Содержание: | Следующая>
Отсутствующие или неожиданные токены
Еще одна распространенная ошибка - забывают завершить составную команду, например if or в то время как. Давайте посмотрим, что произойдет, если мы удалим точку с запятой после тестXNUMX в if команда:
#! / Bin / Баш
# проблема: скрипт для демонстрации типичных ошибок number = 1
если [$ number = 1], то
echo "Число равно 1." еще
echo "Число не равно 1."
fi
#! / Bin / Баш
# проблема: скрипт для демонстрации типичных ошибок number = 1
если [$ number = 1], то
echo "Число равно 1." еще
echo "Число не равно 1."
fi
Результат такой:
[я @ linuxbox ~] $ беда
/ home / me / bin / Trouble: строка 9: синтаксическая ошибка рядом с неожиданным токеном
`еще '
/ home / me / bin / проблема: строка 9: `else '
[я @ linuxbox ~] $ беда
/ home / me / bin / Trouble: строка 9: синтаксическая ошибка рядом с неожиданным токеном
`еще '
/ home / me / bin / проблема: строка 9: `else '
Опять же, сообщение об ошибке указывает на ошибку, которая возникает позже, чем сама проблема. То, что происходит, действительно очень интересно. Напомним, if принимает список команд и оценивает код выхода последней команды в списке. В нашей программе мы хотим, чтобы этот список состоял из одной команды, [, синоним слова test. В [ команда принимает то, что следует за ней, как список аргументов; в нашем случае четыре аргумента: $ номер, 1, =и ]. После удаления точки с запятой слово тогда добавляется в список аргументов, что синтаксически допустимо. Следующий эхо команда тоже разрешена. Это интерпретируется как другая команда в списке команд, которые if будет оценивать код выхода. В еще появляется следующим, но он неуместен, поскольку оболочка распознает его как зарезервированное слово (слово, имеющее особое значение для оболочки), а не имя команды, отсюда и сообщение об ошибке.