Виправити синтаксичну помилку Bash біля неочікуваного маркера

Кодування в терміналі Linux Bash стало переважаючою практикою в секторі кодування. Інженери програмного забезпечення та студенти, які вивчають мову кодування, стикаються з різними помилками. Якщо ви неодноразово бачили такі помилки, як синтаксична помилка біля несподіваного маркера “(” або синтаксична помилка Bash біля неочікуваного маркера, ви можете спробувати покластися на методи, описані в статті, і стати досвідченим програмістом. Прочитайте методи, описані в статті, у розділі порядку описаного та виправте помилки в командних рядках вашого файлу.

Як виправити синтаксичну помилку Bash біля неочікуваного маркера

Linux Bash є інтерпретатором командного рядка для системи на базі Linux і є заміною Bourne Shell або sh. Файли називаються у форматі .sh у сценаріях Linux Bash. Якщо в коді в сценарії оболонки виникають проблеми з форматуванням, ви можете зіткнутися з синтаксичною помилкою. Якщо помилка близька до символу (, оболонка підкаже вам помилку в рядку і відобразить помилку у відповідному рядку. Оскільки Linux Bash є інтерпретатором, рядок з помилкою буде повернуто вам у Термінал, і він припинить сканування решти команд у сценарії. Отже, вам потрібно виправити помилку в конкретному командному рядку та перейти до наступного, щоб виправити неочікувану помилку маркера в сценарії оболонки. Причини синтаксису помилка біля неочікуваного маркера в Linux Bash наведена нижче в цьому розділі, як показано нижче:

  • Кодування за допомогою escape-послідовностей. Якщо ви написали коди в сценарії Bash, escape-послідовності або лапки в сценарії можуть викликати помилки. Щоб виправити помилку, escape-послідовності та лапки мають бути записані у правильному форматі.

  • Неправильний синтаксис у файлі кодування. Синтаксис у коді може призвести до синтаксичної помилки, якщо команда написана в неправильному синтаксисі, наприклад, зміна порядку циклів.

  • Неправильне використання команди. Якщо ви використовуєте команду неправильно, наприклад, неправильне призначення значення, можливо, у вас є синтаксична помилка.

  • Несумісна ОС у системах. Якщо оболонка для сценарію кодування несумісна між системами Unix та DOS, у вас може виникнути неочікувана помилка.

  • Проблеми зі сценарієм оболонки bash. Проблеми, що запущені в сценарії оболонки bash у файлі, скопійованому з іншої системи, можуть призвести до неочікуваної помилки маркера.

Розглянемо файл з іменем example.sh, створений у сценарії Linux Bash з наступними командними рядками для пояснення. Файл прикладу містить можливості синтаксичних помилок і включає всі можливі команди, які можна використовувати в сценарії оболонки.

str= ‘First command line of ‘(example file)’ in the script’
str= [(1,2),(3,4)]
if[ $day == “mon” ] then
 echo “mon”
else
 echo “no mon”
fi
for VARIABLE in {0..2}; then
do echo command1; echo command2; echo command3; echo command4; done
while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; done; fi

Спосіб 1. Виправте помилки вручну в кожному командному рядку

Перший спосіб виправити помилки — це виправити синтаксичну помилку вручну в кожному командному рядку сценарію. У цьому розділі обговорюються кроки для вирішення синтаксичних помилок біля несподіваного маркера в командних рядках. Нижче описано процес усунення несподіваної помилки маркера в терміналі. Запустіть файл у терміналі, ввівши команду ./example.sh і натиснувши клавішу Enter.

2. Зверніть увагу на рядки, які містять неочікувану помилку маркера в командних рядках у наведеному нижче результаті.

3. Виправте помилку в кожному рядку, дотримуючись методів, описаних нижче, окремо та збережіть файл.

4. Після внесення змін запустіть файл ще раз і перевірте, чи усунено синтаксичну помилку у файлі.

Крок 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

3. Якщо в командних рядках є кілька невидимих ​​символів, ви можете скористатися командою od –a для перегляду файлу. Якщо вміст файлу не видно у файлі коду, ви можете спробувати прочитати файл за допомогою команди od –a example.sh, щоб змінити код.

Крок ІІ. Видаліть розриви рядків Windows

Якщо в сценарії оболонки є розриви рядків Windows, ви можете використовувати консольні команди, щоб видалити розриви рядків і скопіювати рядки коду до нового файлу, щоб виправити помилку.

Введіть таку команду в терміналі, щоб зберегти вміст файлу в інший файл з іменем correctedexample.sh, щоб видалити розриви рядків Windows у сценарії.

tr –d ‘r’ <example.sh> correctedexample.sh

Крок ІІІ: налаштуйте дозволи на щойно створений файл

Вам потрібно встановити дозвіл для щойно створеного файлу для редагування файлу, щоб файл міг виконуватися в оболонці. Введіть команду як chmod 755 correctedexample.sh у терміналі, щоб надати дозволи на файл і запустити файл. Тепер ви можете переглянути виправлений файл, виправити проблеми з форматуванням і виправити синтаксичну помилку біля неочікуваного маркера «(» у файлі.

Крок IV: Відформатуйте код у файлі

Другим кроком є ​​форматування рядків коду окремо та змінення командних рядків у файлі вручну. Параметри форматування файлу, щоб виправити синтаксичну помилку біля несподіваного маркера «(», обговорюються нижче в цьому розділі.

Варіант 1. Замініть одинарні лапки подвійними

Якщо ви використовуєте одинарні лапки в командних рядках, вам потрібно змінити команду, замінивши одинарні лапки подвійними, щоб виправити синтаксичну помилку. У файлі example.sh видаліть рядки коду, які містять ‘ і ‘ або одинарні лапки в команді, і замініть одинарні лапки подвійними лапками або ” і “. Тут, у файлі прикладу, вам потрібно змінити код як str= «Перший командний рядок «(файл прикладу)» у скрипті»

Примітка: подвійні лапки необхідні для команд типу параметра, таких як str= “[(1,2),(3,4)]”.

Варіант 2. Додайте $ до рядків рядків

Якщо ви додали рядкові значення до сценарію, вам потрібно додати $ до значень рядка, щоб виправити синтаксичну помилку в сценарії. Додайте $ для командних рядків із рядковими значеннями, щоб виправити несподівану помилку. Тут, у файлі прикладу, змініть командний рядок як;

str= $ ‘First command line of ‘(example file)’ in the script’

Примітка: якщо ви використовуєте $ у значенні рядка, ви можете обійти послідовність escape-послеху, оскільки командні рядки декодуються стандартом ANSI C. Іншими словами, використовуючи $ для значення рядка, ви можете уникнути використання подвійних лапок замість одинарних лапок у командних рядках.

Варіант 3. Перетворіть табуляції на пробіли

Пробіли, які ви залишили між двома операторами в команді, мають бути пробілами замість табуляції, щоб виправити синтаксичну помилку в сценарії. Якщо ви отримуєте помилку на Cygwin, ви можете спробувати перетворити табуляції в кодах на пробіли, щоб виправити помилку. Нижче наведено командний рядок як;

do echo command1;       echo command2;             echo command3;             echo command4;             done

Наведену вище команду слід переписати, як показано нижче, щоб виправити помилку.

do echo command1; echo command2; echo command3; echo command4; done

Варіант 4. Використовуйте escape-символи

Якщо ви використовуєте символ bash, важливо використовувати escape-символ разом із символом bash, щоб виправити синтаксичну помилку. Дужки або () є спеціальними символами bash у файлі, отже, вам потрібно буде використовувати символ escape або зворотну косу риску в командному рядку, щоб уникнути звичайних символів для виконання команди. Команда str= ‘Перший командний рядок ‘(файл прикладу)’ в скрипті’ не призведе до помилки в терміналі, оскільки використовується escape-символ.

Варіант 5. Використовуйте пробіл між символами

Сценарій оболонки розпізнає команди та оператори сценарію за значеннями за замовчуванням. Вам потрібно забезпечити належне використання простору між символами, щоб оболонка могла ідентифікувати команду, задану в сценарії. Пробіл — це символ, який використовується для розрізнення двох символів у командному рядку. У коді немає пробілу між if і [, which gives the unexpected token error as the if[ command is not identified by the shell. If the code is changed to if [ $ day == “mon” ]; тоді помилку можна вирішити як команду бюлетеня оболонки, якщо вона ідентифікована оболонкою.

Варіант 6. Використовуйте роздільник команд для операторів

Різні команди в сценарії оболонки потрібно розділити на оператори, щоб термінал ідентифікував окремі команди. Вам потрібно використовувати роздільник команд, щоб виправити синтаксичну помилку в Linux Bash. Операції в команді повинні бути розділені роздільником команд, таким як крапка з комою або ; або новий рядок, натиснувши клавішу Enter. Наприклад, команда в коді if [ $ day == “mon” ] потім треба як би змінити [ $ day == “mon” ]; потім виправити помилку. Оскільки крапка з комою використовується як роздільник команд між символами [ and then, you can fix this error.

Option 7: Remove Additional Statements

Sometimes, you may have added additional statements or may have mixed up the codes in case of multiple nested loops. You need to remove the additional statements on the command lines to fix the Syntax error near unexpected token ‘(’ in the Linux Bash. The bash loops for…done or and the constructional constructs if… fi needs to be in the correct syntax. The example file has the wrong syntax in the for loop has the term then which is used in the if statement. Modifying the code as the following code will fix the unexpected token error. The statement then is an additional statement in the code and removing the term will fix the error.

for VARIABLE in {0..2}; do echo command1; echo command2; echo command3; echo command4; done 

Option 8: Ensure Order of Closing of Statements is Correct

If you are using many nested or conditional construct statements in the shell script, you have to ensure that the loops are closed in the order they are opened. You can use a new line separator to avoid conflicts with the loops. The order of closing the nested loops and conditional statements should be correct and must not be altered. The loops in the code while true; do if [ $ day == “mon” ]; потім луна «мон»; else echo «не пн»; виконано; fi потрібно закрити в правильному порядку. Зміна коду, як показано нижче, може виправити неочікувану помилку маркера, оскільки порядок закриття операторів виправлено.

while true; do if [ $ day == “mon” ]; then echo “mon”; else echo “not mon”; fi; done

Спосіб 2: переписати код

Якщо ви скопіювали код і вставили його в новий файл на терміналі, ви можете спробувати переписати код вручну, щоб виправити помилку. Помилки в коді можна виправити, якщо ви написали код без помилок форматування в сценарії оболонки. Це пов’язано з тим, що приховані символи та проблеми з форматуванням у текстовому редакторі, наприклад Microsoft Word, які ви могли використовувати для копіювання та вставки коду, могли викликати помилку.

Спосіб 3. Використовуйте команду Dos2unix.exe

Якщо ви використовуєте операційну систему Unix, ви можете писати коди із символом переведення рядка як n, щоб перейти до наступного рядка у файлі. Однак, якщо ви використовуєте ОС Windows, вам потрібно перейти до наступного рядка коду за допомогою повернення каретки та переведення рядка або rn у файлі. Якщо ви виконуєте код, написаний в ОС Windows, у Cygwin, ви можете отримати синтаксичну помилку біля неочікуваного маркера ‘(‘.

Щоб виправити помилку, потрібно очистити символи повернення каретки, використовуючи інструмент командного рядка DOS в Unix як конвертор формату текстового файлу. Введіть таку команду як dos2unix.exe example.sh у терміналі, і ви зможете конвертувати файл у формат Unix.

***

У статті обговорювалися основні методи виправлення синтаксичної помилки Bash біля неочікуваного маркера ‘(‘ в сценарії. Якщо ви використовуєте Linux Bash, ви можете використовувати методи, описані в цьому розділі, щоб виправити синтаксичну помилку Bash біля неочікуваного маркера. Якщо ви Ви прочитали всю статтю та знайшли вміст корисним, будь ласка, повідомте нам свої пропозиції та запитання в розділі коментарів.

  Як використовувати віртуальні фони в Microsoft Teams