Выпраўце сінтаксічную памылку Bash каля нечаканага токена

Кадаванне ў тэрмінале Linux Bash стала пераважнай практыкай у сектары кадавання. Інжынеры-праграмісты і студэнты, якія вывучаюць мову кадавання, сутыкаюцца з рознымі памылкамі. Калі вы неаднаразова бачылі такія памылкі, як сінтаксічная памылка каля нечаканага токена ‘(‘ або сінтаксічная памылка Bash побач з нечаканым маркерам), вы можаце паспрабаваць пакласціся на метады, апісаныя ў артыкуле, і стаць дасведчаным кодіроўшчыкам. Прачытайце метады, апісаныя ў артыкуле ў апісаны парадак і выпраўце памылкі ў камандных радках вашага файла.

Як выправіць сінтаксічную памылку Bash каля нечаканага токена

Linux Bash – гэта інтэрпрэтатар каманднага радка для сістэмы на базе Linux і з’яўляецца заменай Bourne Shell або sh. Файлы называюцца ў фармаце .sh у сцэнары Linux Bash. Калі ёсць праблемы з фарматаваннем у кодзе ў сцэнары абалонкі, вы можаце сутыкнуцца з сінтаксічнай памылкай. Калі памылка блізкая да сімвала (, абалонка падкажа вам памылку ў радку і пакажа памылку ў адпаведным радку. Паколькі Linux Bash з’яўляецца інтэрпрэтатарам, радок з памылкай будзе вернуты ў Тэрмінал, і ён спыніць сканаванне астатніх каманд у скрыпце. Такім чынам, вам трэба выправіць памылку ў канкрэтным камандным радку і перайсці да наступнага, каб выправіць нечаканую памылку токена ў сцэнары абалонкі. Прычыны сінтаксісу памылка каля нечаканага токена ў Linux Bash, пералічаныя ніжэй у гэтым раздзеле, як паказана ніжэй:

  • Кадаванне з экраннымі паслядоўнасцямі – калі вы напісалі коды ў сцэнары Bash, экранныя паслядоўнасці або двукоссі ў скрыпце могуць выклікаць памылкі. Экранальныя паслядоўнасці і двукоссі павінны быць напісаны ў правільным фармаце, каб выправіць памылку.

  • Няправільны сінтаксіс у файле кадавання – сінтаксіс у кодзе можа выклікаць сінтаксічную памылку, калі каманда напісана ў няправільным сінтаксісе, напрыклад, змена парадку цыклаў.

  • Няправільнае выкарыстанне каманды. Калі вы выкарыстоўваеце каманду няправільна, напрыклад, няправільнае прызначэнне значэння, магчыма, у вас сінтаксічная памылка.

  • Несумяшчальная АС у сістэмах. Калі абалонка для сцэнарыя кадавання несумяшчальная паміж сістэмамі 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, каб змяніць код.

Крок II: Выдаліце ​​разрывы радка Windows

Калі ў скрыпце абалонкі ёсць разрывы радкоў Windows, вы можаце выкарыстоўваць кансольныя каманды, каб выдаліць разрывы радкоў і скапіяваць радкі кода ў новы файл, каб выправіць памылку.

Увядзіце наступную каманду ў тэрмінале, каб захаваць змесціва ў файле ў іншы файл з імем correctedexample.sh, каб выдаліць разрывы радка Windows у скрыпце.

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

Крок III: Усталюйце дазвол на зноў створаны файл

Вам трэба ўсталяваць дазвол для зноў створанага файла, каб рэдагаваць файл, каб файл мог быць выкананы ў абалонцы. Увядзіце каманду як 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’

Заўвага: калі вы выкарыстоўваеце $ у радковым значэнні, вы можаце абыйсці паслядоўнасць экранавання зваротнай касой рысы, паколькі камандныя радкі дэкадуюцца стандартам 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: Выкарыстоўвайце ўцякаючыя сімвалы

Калі вы выкарыстоўваеце сімвал bash, важна выкарыстоўваць бегчы сімвал разам з сімвалам bash, каб выправіць сінтаксічную памылку. Дужкі або () – гэта спецыяльныя сімвалы bash у файле, такім чынам, вам трэба будзе выкарыстоўваць бегчы сімвал або зваротную косую рысу ў камандным радку, каб экранаваць звычайныя сімвалы для выканання каманды. Каманда 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” ]; затым рэха «пн»; інакш рэха «не пн»; зроблена; 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 каля нечаканага токена. Калі вы прачыталі ўсю артыкул і палічылі змест карысным, калі ласка, паведаміце нам свае прапановы і запыты ў раздзеле каментарыяў.

Праверце гэта:  5 лепшых класічных кааператыўных гульняў з сучаснымі рымейкамі