Fix: Syntax Error nær uventet token `('

Feilmeldingens syntaksfeil nær uventet token `(' forekommer i et Unix-miljø, Cygwin og i kommandolinjegrensesnittet i Windows. Denne feilen vil sannsynligvis bli utløst når du prøver å kjøre et shell-script som ble redigert eller opprettet i eldre DOS / Windows eller Mac-systemer.

Syntaksfeil nær uventet token `('

Denne feilmeldingen dukker også opp når du legger inn kommandoer i Linux-kommandolinjen for hverdagslige oppgaver, for eksempel å kopiere filer manuelt osv. Hovedårsakene til at denne feilmeldingen oppstår er enten på grunn av dårlig syntaks eller et problem med operativsystemet ved å tolke et annet systems kommandoer / skall.

Hva forårsaker Syntax Error nær uventet token `('?

Årsakene til denne feilmeldingen er svært forskjellige og kan ikke vises i en artikkel, da det er tusenvis av syntaksmuligheter som går galt når du utfører kommandoer. De viktigste årsakene til denne feilen er:

  • Dårlig syntaks når du utfører en kommando i en av plattformene. Enten bruker du ikke kommandoen riktig, eller har du skrevet feil syntaks.
  • Skallet er ikke kompatibelt mellom Unix / DOS-systemer.
  • Det er problemer som kjører bash shell-skriptet fra en annen kilde .

I denne artikkelen antar vi at du kjenner det grunnleggende om koding og har en ide om hva du gjør. Hvis du er nybegynner, er det best at du følger dyptgående opplæringer om språket / kommandoen du prøver å utføre. Du har sannsynligvis gjort en feil av en eller annen syntaks.

Løsning 1: Kontroller syntaks og format for kommandoer

Den første og fremst grunnen til at du kan oppleve denne feilmeldingen, er den med dårlig syntaks i koden din, eller at du ikke følger det nøyaktige formatet for kommandoene. Hver kommando har et forhåndsdefinert format som du kan se i dokumentasjonen. Flere parametere er valgfrie, andre er obligatoriske.

Videre bør ekstra omhu tas for ekstra plass, bruk av doble anførselstegn og de obligatoriske parametrene som kreves. Hvis noen av dem mangler eller er blitt erklært feil, vil du ikke kunne utføre koden din.

For eksempel i stedet for følgende kode

 [mycom7] # ./ctopo.sh um_test1 [(1, 2), (2, 1)] 

Du må utføre det som

 [mycom7] # ./ctopo.sh um_test1 "[(1, 2), (2, 1)]" 

Forsikre deg også om at du utfører kommandoene / shell-skriptet riktig hvis det spenner over flere linjer.

På grunn av parametertypen er de dobbelte sitatene nødvendige. En ekstra plass kan også ødelegge koden din og tvinge feilmeldingen. Forsikre deg om at du sjekker den offisielle dokumentasjonen til kommandoen du utfører, og ser om det er et problem der.

Løsning 2: Feilsøking av shell-skriptet

Hvis du bruker et skallskript som fungerer i kildesystemet, men returnerer en feil i målet, kan du feilsøke skriptet ved å sjekke variablene som er lagret under utførelsen og deretter se hva som forårsaker problemet. Dette er en veldig vanlig årsak, da skallet i flere tilfeller prøver å tolke en utrykkbar karakter.

Prøv å kjøre skallet med parameteren 'vx'. Dette vil vise oss hvilke kommandoer som kjøres og hvilke verdier som er lagret i skriptet. Her gjennom kan du feilsøke og diagnostisere hva som går galt.

Utfør for eksempel skriptet i terminalen etter å ha inkludert 'vx' som:

 # sh -vx ./test_script5.sh 

Du kan sjekke innholdet i skriptet ved å bruke "katt" -kommandoen som:

 # cat test_script5.sh 

Løsning 3: Bruke kommandoen 'dos2unix.exe'

I Windows / DOS-tekstfiler er en ny linje en kombinasjon av en vognretur (\ r) etterfulgt av en linjemating (\ n). I Mac (før Mac OS X) brukte en linjeskift en enkel vognretur (\ r). Unix / Linux og Mac OS X bruker linjeskift på linjeskift (\ n). Hvis du bruker Cygwin, vil den ikke behandle skriptene som er laget av DOS / Windows og eldre Mac på grunn av det ekstra Carriage Return (\ r) tegnet.

Bruker kommandoen 'dos2unix.exe'

Her kan du lage kommandoen 'dos2unix.exe' som vil konvertere skriptet til riktig format, og deretter kan du utføre det uten problemer.

For å konkludere, må du undersøke kommandoene og plattformtypen du bruker, og sørge for at det ikke er noen avvik. Siden vi ikke kan dekke hver eneste mulighet, vil du ha en ide om hva slags feil som kan oppstå og hvordan du løser dem.

Interessante Artikler