Исправить синтаксическую ошибку Bash рядом с неожиданным токеном
Опубликовано: 2022-05-30Кодирование в терминале Linux Bash стало преобладающей практикой в секторе кодирования. Инженеры-программисты и студенты, изучающие язык программирования, сталкиваются с различными ошибками. Если вы неоднократно сталкивались с такими ошибками, как Синтаксическая ошибка рядом с неожиданным токеном '(' или Синтаксическая ошибка Bash рядом с неожиданным токеном, вы можете попробовать использовать методы, описанные в статье, и стать опытным программистом. Прочитайте методы, описанные в статье, в разделе порядок описан и исправьте ошибки в командных строках вашего файла.
Содержание
- Как исправить синтаксическую ошибку Bash рядом с неожиданным токеном
- Способ 1: исправить ошибки в каждой командной строке вручную
- Шаг I: Чтение содержимого файла
- Шаг II. Удалите разрывы строк Windows
- Шаг III: Установите разрешения для вновь созданного файла
- Шаг IV: форматирование кода в файле
- Способ 2: переписать код
- Способ 3: используйте команду Dos2unix.exe
Как исправить синтаксическую ошибку Bash рядом с неожиданным токеном
Linux Bash — интерпретатор командной строки для системы на базе Linux, заменяющий Bourne Shell или sh. Файлы именуются в формате .sh в сценариях Linux Bash. Если в коде сценария оболочки есть проблемы с форматированием, вы можете столкнуться с синтаксической ошибкой. Если ошибка близка к символу ( , оболочка подскажет вам ошибку в строке и отобразит ошибку в соответствующей строке. Поскольку Linux Bash является интерпретатором, строка с ошибкой будет возвращена вам в Терминал, и он прекратит сканирование остальных команд в сценарии. Следовательно, вам необходимо исправить ошибку в конкретной командной строке и перейти к следующей, чтобы исправить непредвиденную ошибку токена в сценарии оболочки. Причины синтаксиса ошибка рядом с неожиданным токеном в Linux Bash перечислены ниже в этом разделе, как показано ниже:
- Кодирование с помощью escape-последовательностей . Если вы написали код в сценарии Bash, escape-последовательности или кавычки в сценарии могут вызвать ошибки. Чтобы исправить ошибку, управляющие последовательности и кавычки должны быть записаны в правильном формате.
- Неправильный синтаксис в файле кодирования . Синтаксис в коде может привести к синтаксической ошибке, если команда написана с неправильным синтаксисом, например, при изменении порядка циклов.
- Неправильное использование команды. Если вы неправильно используете команду, например, присваиваете неверное значение, у вас может возникнуть синтаксическая ошибка.
- Несовместимая ОС в системах . Если оболочка для сценария кодирования несовместима между системами Unix и DOS, у вас может возникнуть непредвиденная ошибка.
- Проблемы в сценарии оболочки bash . Проблемы, выполняемые в сценарии оболочки bash в файле, скопированном из другой системы, могут привести к непредвиденной ошибке токена.
Рассмотрим файл с именем example.sh , созданный в сценариях Linux Bash со следующими командными строками для пояснений. Файл примера допускает синтаксические ошибки и включает все возможные команды, которые можно использовать в сценарии оболочки.
str= 'Первая командная строка '(пример файла)' в скрипте' ул = [(1,2),(3,4)] если[ $day == "mon" ] тогда эхо "мон" еще эхо "нет пн" фи для ПЕРЕМЕННОЙ в {0..2}; тогда выполнить эхо-команду1; эхо-команда2; эхо-команда3; эхо-команда4; Выполнено пока верно; делать, если [ $ день == "пн" ]; затем эхо «мон»; иначе эхо «не пн»; Выполнено; фи
Способ 1: исправить ошибки в каждой командной строке вручную
Первый способ исправить ошибки — исправить синтаксическую ошибку вручную в каждой командной строке скрипта. В этом разделе обсуждаются шаги по устранению синтаксических ошибок рядом с неожиданным токеном в командных строках. Процесс исправления непредвиденной ошибки токена в Терминале описан ниже. Запустите файл в Терминале , введя команду ./example.sh и нажав клавишу Enter .
2. Обратите внимание на строки с непредвиденной ошибкой токена в командных строках результата ниже.
3. Исправьте ошибку в каждой строке, следуя описанным ниже методам по отдельности и сохранив файл.
4. После внесения изменений снова запустите файл и проверьте, устранена ли синтаксическая ошибка в файле.
Читайте также: Как установить Linux Bash Shell в Windows 10
Шаг I: Чтение содержимого файла
Первым шагом к устранению синтаксической ошибки в командной строке является чтение файла в Терминале. ЕСЛИ есть проблемы с файлом, возможно, вы не сможете просмотреть файл. Обычная практика просмотра файла заключается в запуске файла с помощью команды ./example.sh , но вы не можете изменить содержимое файла. Варианты просмотра содержимого файла и изменения командных строк для исправления синтаксической ошибки рядом с неожиданным токеном '(' обсуждаются ниже.
Вариант 1: через CAT-команду
Первый вариант — использовать команду cat для просмотра файла в сценарии оболочки. Прочтите содержимое файла с неожиданной ошибкой токена с помощью команды cat, введя команду cat –v example.sh в Терминале.
Примечание 1. Файл example.sh используется в пояснительных целях, и вам необходимо ввести имя файла с непредвиденной ошибкой токена.
Примечание 2. Команда cat –v используется для отображения всех невидимых символов, которые могут представлять собой возврат каретки или пробел без разрыва.
Вариант 2: Через команду VX
Если вы не можете использовать команду cat, вы можете попробовать использовать команду vx для просмотра и изменения команд в файле, используя шаг, указанный ниже. Введите команду sh –vx ./example.sh в Терминале, чтобы открыть файл.
Вариант 3: Через od –a Command
3. Если в командной строке есть несколько невидимых символов, вы можете использовать команду od –a для просмотра файла. Если содержимое файла не видно в файле кода, вы можете попробовать прочитать файл, используя команду od –a example.sh для изменения кода.
Шаг II. Удалите разрывы строк Windows
Если в сценарии оболочки есть разрывы строк Windows, вы можете использовать консольные команды, чтобы удалить разрывы строк и скопировать строки кода в новый файл, чтобы исправить ошибку.
Введите следующую команду в Терминале, чтобы сохранить содержимое файла в другой файл с именем correctedexample.sh , чтобы удалить разрывы строк Windows в сценарии.
tr –d '\r' <example.sh> исправленоexample.sh
Шаг III: Установите разрешения для вновь созданного файла
Вам необходимо установить разрешение для вновь созданного файла для редактирования файла, чтобы файл можно было выполнить в оболочке. Введите команду как chmod 755 correctedexample.sh в Терминале, чтобы предоставить права доступа к файлу и запустить файл. Теперь вы можете просмотреть исправленный файл и исправить проблемы с форматированием, а также исправить синтаксическую ошибку рядом с неожиданным токеном '(' в файле.
Шаг IV: форматирование кода в файле
Второй шаг — отформатировать строки кода по отдельности и вручную изменить командные строки в файле. Варианты форматирования файла для исправления синтаксической ошибки рядом с неожиданным токеном '(' обсуждаются ниже в этом разделе.
Вариант 1: заменить одинарные кавычки двойными кавычками
Если вы используете одинарные кавычки в командной строке, вам нужно изменить команду, заменив одинарную кавычку двойными, чтобы исправить синтаксическую ошибку. В файле example.sh удалите строки кода, содержащие ' и ' или одинарные кавычки в команде, и замените одинарные кавычки двойными кавычками или " и '' . Здесь, в файле примера, вам нужно изменить код как str= «Первая командная строка «\(файл примера)\» в скрипте»
Примечание . Двойные кавычки необходимы для команд типа параметра, таких как str= «[(1,2),(3,4)]» .
Читайте также: 20 лучших легковесных дистрибутивов Linux 2022 года
Вариант 2: добавить $ к строковым строкам
Если вы добавили строковые значения в скрипт, вам нужно добавить $ к строковым значениям, чтобы исправить синтаксическую ошибку в скрипте. Добавьте $ для командных строк со строковыми значениями, чтобы исправить непредвиденную ошибку. Здесь, в файле примера, измените командную строку как;
str= $ 'Первая командная строка '\(пример файла)\' в скрипте'
Примечание. Если вы используете $ в строковом значении, вы можете обойти escape-последовательность обратной косой черты, поскольку командные строки декодируются по стандарту ANSI C. Другими словами, используя $ для строкового значения, вы можете избежать использования двойных кавычек вместо одинарных в командных строках.
Вариант 3: преобразовать вкладки в пробелы
Пробелы, которые вы оставили между двумя операторами в команде, должны быть пробелами, а не табуляцией, чтобы исправить синтаксическую ошибку в сценарии. Если вы получаете ошибку на Cygwin, вы можете попробовать преобразовать вкладки в кодах в пробелы, чтобы исправить ошибку. Командная строка представлена ниже как;
выполнить эхо-команду1; эхо-команда2; эхо-команда3; эхо-команда4; Выполнено
Приведенную выше команду следует переписать, как показано ниже, чтобы исправить ошибку.
выполнить эхо-команду1; эхо-команда2; эхо-команда3; эхо-команда4; Выполнено
Вариант 4. Используйте escape-символы
Если вы используете символ bash, важно использовать escape-символ вместе с символом bash, чтобы исправить синтаксическую ошибку. Круглые скобки или () являются специальными символами bash в файле, поэтому вам нужно будет использовать escape-символ или обратную косую черту в командной строке, чтобы экранировать обычные символы для выполнения команды. Команда str= 'Первая командная строка \'(пример файла)\' в команде script' не выдаст ошибку в Терминале, так как используется escape-символ.
Читайте также: Как попасть к нам в Linux
Вариант 5. Используйте пробелы между символами
Сценарий оболочки распознает команды и операторы в сценарии по значениям по умолчанию. Вам необходимо обеспечить правильное использование пробелов между символами, чтобы оболочка могла идентифицировать команду, указанную в сценарии. Пробел — это символ, который используется для различения двух символов в командной строке. В коде между if и [ нет пробела, что приводит к неожиданной ошибке токена, поскольку команда if[ не идентифицируется оболочкой. Если изменить код на if [ $ day == «mon» ]; тогда ошибка может быть решена с помощью команды бюллетеня оболочки , если она идентифицируется оболочкой.
Вариант 6. Используйте разделитель команд для операторов
Различные команды в сценарии оболочки должны быть разделены на операторы, чтобы Терминал мог идентифицировать отдельные команды. Вам нужно использовать разделитель команд, чтобы исправить синтаксическую ошибку в Linux Bash. Операторы в команде должны быть разделены разделителем команд, таким как точка с запятой или ; или новую строку, нажав клавишу Enter . Например, команду в коде if [$day == "mon"] then нужно изменить так, как если бы [$day == "mon"]; затем исправить ошибку. Поскольку точка с запятой используется в качестве разделителя команд между символами [ и затем , вы можете исправить эту ошибку.
Вариант 7. Удалить дополнительные операторы
Иногда вы могли добавить дополнительные операторы или перепутать коды в случае нескольких вложенных циклов. Вам необходимо удалить дополнительные операторы в командных строках, чтобы исправить синтаксическую ошибку рядом с неожиданным токеном '(' в Linux Bash. Циклы bash для…done или и конструкционные конструкции , если… fi должны быть в правильном синтаксисе. файл примера имеет неправильный синтаксис, в цикле for есть термин then , который используется в операторе if . Изменение кода следующим образом исправит непредвиденную ошибку маркера. Оператор then является дополнительным оператором в коде и удаляет термин исправит ошибку.
для ПЕРЕМЕННОЙ в {0..2}; выполнить эхо-команду1; эхо-команда2; эхо-команда3; эхо-команда4; Выполнено
Вариант 8. Убедитесь, что порядок закрытия выписок правильный
Если вы используете много вложенных или условных операторов конструкции в сценарии оболочки, вы должны убедиться, что циклы закрываются в том порядке, в котором они открываются. Вы можете использовать новый разделитель строк, чтобы избежать конфликтов с циклами. Порядок закрытия вложенных циклов и условных операторов должен быть правильным и не должен изменяться. Циклы в коде пока истинны; делать, если [ $ день == "пн" ]; затем эхо «мон»; иначе эхо «не пн»; Выполнено; fi нужно закрывать в правильном порядке. Изменение кода, как показано ниже, может исправить непредвиденную ошибку токена, поскольку порядок закрытия операторов исправлен.
пока верно; делать, если [ $ день == "пн" ]; затем эхо «мон»; иначе эхо «не пн»; фи; Выполнено
Читайте также: Что такое интерпретатор командной строки?
Способ 2: переписать код
Если вы скопировали код и вставили его в новый файл в Терминале, вы можете попробовать переписать код вручную, чтобы исправить ошибку. Ошибки в коде можно исправить, если вы написали код без каких-либо ошибок формата в сценарии оболочки. Это связано с тем, что скрытые символы и проблемы с форматированием в текстовом редакторе, таком как Microsoft Word, которые вы могли использовать для копирования и вставки кода, могли привести к ошибке.
Способ 3: используйте команду Dos2unix.exe
Если вы используете операционную систему Unix, вы можете писать коды с символом перевода строки как \n для перехода к следующей строке в файле. Однако, если вы используете ОС Windows, вам нужно перейти к следующей строке кода, используя возврат каретки и перевод строки или \r\n в файле. Если вы выполняете код, написанный в ОС Windows, в Cygwin, вы можете получить синтаксическую ошибку рядом с неожиданным токеном '('.
Чтобы исправить ошибку, вам нужно очистить символы возврата каретки, используя инструмент командной строки DOS в Unix в качестве конвертера формата текстового файла. Введите следующую команду как dos2unix.exe example.sh в терминале, и вы сможете преобразовать файл в формат Unix.
Рекомендуемые:
- Как создать аккаунт Telegram на Android
- Исправить ошибку выполнения C++ в Windows 10
- Как удалить учетную запись Github навсегда
- 14 лучших видеокарт для Linux
В статье обсуждались основные методы исправления синтаксической ошибки Bash рядом с неожиданным токеном '(' в сценарии. Если вы используете Linux Bash, вы можете использовать методы, описанные в этом разделе, для исправления синтаксической ошибки Bash рядом с неожиданным токеном. Если вы Если вы прочитали всю статью и нашли ее содержание полезным, сообщите нам о своих предложениях и вопросах в разделе комментариев.