
Programmering og bruk av Linux Bash-terminalen har blitt en sentral del av programvareutvikling. Mange programvareingeniører og studenter som lærer seg koding, støter ofte på ulike typer feil. En gjentagende feilmelding er «Syntax error near unexpected token ‘(’» eller «Bash syntax error near unexpected token». Denne artikkelen gir deg metoder for å løse disse problemene og bli en mer effektiv koder. Følg de presenterte trinnene for å rette feilene i dine kommandolinjer.
Løsning av «Bash Syntax Error Near Unexpected Token»
Linux Bash fungerer som en kommandolinjetolk for Linux-baserte systemer, og erstatter den eldre Bourne Shell (sh). Bash-skriptfiler bruker vanligvis filformatet «.sh». Hvis det oppstår formateringsproblemer i koden din, kan dette resultere i en syntaksfeil. Spesielt hvis feilen er relatert til tegnet «(«, vil skallet rapportere feilen i den aktuelle linjen. Siden Linux Bash tolker kommandoer linje for linje, vil feilen stoppe skanningen av resten av skriptet. Derfor er det nødvendig å rette feilen i den berørte kommandolinjen før du fortsetter. Nedenfor er en liste over vanlige årsaker til syntaksfeil relatert til uventede tegn i Linux Bash:
-
Feilaktig bruk av escape-sekvenser: Hvis du bruker escape-sekvenser eller anførselstegn feil, kan dette skape problemer i Bash-skript. Disse må skrives i riktig format for å unngå feil.
-
Syntaksfeil i koden: Feil syntaks, som å bruke løkker i feil rekkefølge, kan også føre til syntaksfeil.
-
Feil bruk av kommandoer: Hvis du ikke bruker kommandoer korrekt, for eksempel ved feil verditilordning, kan dette føre til syntaksfeil.
-
Inkompatibelt operativsystem: Skript skrevet for Unix-systemer kan være inkompatible med DOS-systemer, noe som kan gi feil.
-
Problemer med Bash-skript: Feil i et Bash-skript kopiert fra et annet system kan også føre til uventede feil.
La oss bruke en fil kalt «eksempel.sh» i Linux Bash-skriptet som et eksempel for å illustrere mulige syntaksfeil. Denne filen inneholder en rekke kommandolinjer som kan generere feil:
str= ‘Første kommandolinje av ‘(eksempelfil)’ i skriptet’ str= [(1,2),(3,4)] if[ $day == “mon” ] then echo “man” else echo “ikke man” 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 “man”; else echo “ikke man”; done; fi
Metode 1: Manuell feilretting på hver kommandolinje
En måte å rette opp feil på er å gå gjennom hver kommandolinje manuelt og korrigere syntaksfeilene. Følg disse stegene for å løse «unexpected token»-feilene:
- Kjør filen i terminalen ved hjelp av kommandoen `./eksempel.sh` og trykk Enter.
- Legg merke til linjene hvor feilmeldingen «unexpected token» oppstår.
- Korrigere feilene i hver linje ved å bruke de metodene som er beskrevet nedenfor.
- Kjør filen på nytt etter endringene og sjekk om syntaksfeilene er løst.
Trinn I: Les filinnholdet
Det første trinnet er å lese innholdet i filen. Hvis det er problemer med filen, kan det hende at du ikke kan se innholdet. Du kan normalt kjøre filen med `./eksempel.sh`, men dette endrer ikke innholdet. Nedenfor finner du alternativer for å vise og redigere filen:
Alternativ 1: CAT-kommandoen
Bruk `cat`-kommandoen for å vise filen. Kjør `cat -v eksempel.sh` i terminalen for å vise innholdet.
Merk 1: Bytt ut «eksempel.sh» med navnet på din fil.
Merk 2: `cat -v`-kommandoen viser alle usynlige tegn, som vognretur og ikke-brytende mellomrom.
Alternativ 2: VX-kommandoen
Hvis `cat`-kommandoen ikke fungerer, kan du bruke `vx`-kommandoen. Skriv `sh -vx ./eksempel.sh` i terminalen for å åpne filen.
Alternativ 3: od -a kommandoen
Hvis du har problemer med å se usynlige tegn, kan du bruke kommandoen `od -a` for å vise filen. Bruk `od -a eksempel.sh` for å inspisere koden.
Trinn II: Fjern linjeskift fra Windows
Hvis skriptet har Windows-linjeskift, kan du bruke konsollkommandoer for å fjerne dem. Kopier kodelinjene til en ny fil for å rette opp feilen. Bruk følgende kommando for å lagre filen til «korrigert_eksempel.sh» for å fjerne Windows linjeskift:
tr –d ‘r’ <eksempel.sh> korrigert_eksempel.sh
Trinn III: Gi tillatelser til den nye filen
Gi filen de nødvendige tillatelsene for å redigere og kjøre den. Skriv `chmod 755 korrigert_eksempel.sh` i terminalen for å gi tillatelsene.
Trinn IV: Formater kode i filen
Formater kodelinjene manuelt. Nedenfor finner du noen alternativer for å fikse syntaksfeil relatert til uventede tegn:
Alternativ 1: Bytt ut enkle anførselstegn med doble
Hvis du bruker enkle anførselstegn i kommandolinjene, erstatt dem med doble anførselstegn for å rette syntaksfeilen. For eksempel, endre `str= ‘Første kommandolinje av ‘(eksempelfil)’ i skriptet’` til `str= «Første kommandolinje av ‘(eksempelfil)’ i skriptet»`.
Merk: Doble anførselstegn er nødvendig for kommandoer med parametere, som `str= «[(1,2),(3,4)]»`.
Alternativ 2: Legg til `$` til strenglinjer
For å fikse syntaksfeil i strengverdier, legg til en `$` foran strengen. Endre for eksempel `str= ‘Første kommandolinje av ‘(eksempelfil)’ i skriptet’` til `str= $ ‘Første kommandolinje av ‘(eksempelfil)’ i skriptet’`.
Merk: Ved å bruke `$` foran en strengverdi kan du omgå escape-sekvenser og bruke enkle anførselstegn i stedet for doble.
Alternativ 3: Konverter tabulatorer til mellomrom
Sørg for at mellomrom mellom kommandoer er faktisk mellomrom og ikke tabulatorer. Hvis du får feil i Cygwin, kan dette være et problem. Endre for eksempel dette:
do echo command1; echo command2; echo command3; echo command4; done
til dette:
do echo command1; echo command2; echo command3; echo command4; done
Alternativ 4: Bruk escape-tegn
Bruk escape-tegn (omvendt skråstrek `\`) for å unngå feil. Parenteser `()` er spesielle tegn i Bash, så de må escapes. For eksempel `str= «Første kommandolinje av ‘(eksempelfil)’ i skriptet»`.
Alternativ 5: Bruk mellomrom mellom tegn
Korrekt bruk av mellomrom er nødvendig for at skallet skal kunne tolke kommandoer korrekt. For eksempel, det må være et mellomrom mellom `if` og `[`, ellers vil skallet tolke dette som `if[` som ikke er en gyldig kommando. Korrigering fra `if[$day == “mon”]` til `if [ $day == “mon” ]` vil løse denne feilen.
Alternativ 6: Bruk kommandoseparatorer
Separate kommandoer med semikolon `;` eller en ny linje. Endre for eksempel `if [ $day == “mon” ] then` til `if [ $day == “mon” ]; then`. Semikolonet skiller `[` og `then`.
Alternativ 7: Fjern ekstra utsagn
Fjern eventuelle overflødige utsagn fra koden. For eksempel, `then` brukes i `if`-utsagn, ikke `for`-løkker. Korrigere `for VARIABLE in {0..2}; then` til `for VARIABLE in {0..2}; do`.
Alternativ 8: Sørg for at setninger lukkes korrekt
Når du bruker flere løkker eller betingede uttrykk, sørg for at de lukkes i riktig rekkefølge. For eksempel, korriger den feilaktige koden:
while true; do if [ $ day == “man” ]; deretter ekko "man"; annet ekko "ikke man"; ferdig; fi
til:
while true; do if [ $ day == "man" ]; then echo "man"; else echo "ikke man"; fi; done
Metode 2: Skriv koden på nytt
Hvis du har kopiert koden fra et annet sted, kan du prøve å skrive den inn manuelt. Skjulte tegn eller formateringsproblemer i tekstbehandlere som Microsoft Word kan være årsaken til feilene.
Metode 3: Bruk kommandoen dos2unix.exe
Unix-systemer bruker linjeskifttegnet `n`, mens Windows bruker `rn`. Hvis du kjører kode skrevet i Windows på Cygwin, kan dette føre til syntaksfeil. Bruk verktøyet `dos2unix.exe` for å konvertere filen. Skriv `dos2unix.exe eksempel.sh` i terminalen.
***
Denne artikkelen har presentert de mest grunnleggende metodene for å løse Bash syntaksfeil relatert til uventede tegn. Hvis du jobber med Linux Bash, kan disse metodene hjelpe deg. Hvis du har funnet denne artikkelen nyttig, legg gjerne igjen dine spørsmål og forslag i kommentarfeltet.