Att lösa syntaxfel i Bash-terminalen
Kodning i Linux Bash-terminalen är en vanlig företeelse inom programvaruutveckling. Programmerare, såväl som de som studerar programmering, stöter ofta på olika typer av fel. Om du ofta ser felmeddelanden som ”Syntaxfel nära oväntat token ’(’” eller ”Bash-syntaxfel nära oväntat token”, kan du med fördel använda de metoder som beskrivs här för att förbättra dina kodningsfärdigheter. Följ metoderna i den ordning de presenteras för att åtgärda fel i dina kommandorader.
Förståelse av Bash-syntaxfel
Linux Bash är en kommandotolk för Linux-baserade system och fungerar som en ersättning för Bourne Shell (sh). Bash-skriptfiler har vanligtvis filändelsen .sh. Syntaxfel kan uppstå om det finns formateringsproblem i koden i skalskriptet. Om felet är relaterat till tecknet ’(’ kommer terminalen att indikera detta fel på motsvarande rad. Eftersom Linux Bash är en tolk, kommer den att returnera felraden i terminalen och avbryta skanningen av efterföljande kommandon. Det är därför nödvändigt att åtgärda felet i den specifika kommandoraden och fortsätta till nästa för att eliminera ”oväntat token”-fel i skalskriptet. Orsakerna till syntaxfel nära ”oväntat token” i Linux Bash listas nedan:
- Felaktig användning av escape-sekvenser: Om escape-sekvenser eller citattecken är felaktigt formaterade i Bash-skriptet kan det leda till fel. Korrekt formatering är avgörande.
- Felaktig syntax i kodfilen: Om syntaxen i koden är felaktig, exempelvis felaktig ordning på loopar, kan det orsaka syntaxfel.
- Felaktig användning av kommandon: Felaktig användning av kommandon, som felaktig värdetilldelning, kan också ge upphov till syntaxfel.
- Inkompatibelt operativsystem: Om skalskriptet inte är kompatibelt mellan Unix- och DOS-system kan ”oväntat token”-fel uppstå.
- Problem med skalskriptet: Problem i skalskriptet som kopieras från ett annat system kan också orsaka ”oväntat token”-fel.
För att illustrera detta, betrakta en fil med namnet ’example.sh’ som skapats i Linux Bash-skriptet med följande kommandorader, som har syntaxfel och innehåller olika kommandon som kan användas i ett skalskript.
str= ‘Första kommandoraden i ‘(exempelfil)’ i skriptet’ str= [(1,2),(3,4)] if[ $day == “mon” ] then echo “mon” else echo “inte mon” fi for VARIABEL in {0..2}; sedan do echo kommando1; echo kommando2; echo kommando3; echo kommando4; done while true; do if [ $dag == “mån” ]; then echo “mån”; else echo “inte mån”; done; fi
Metod 1: Manuell Korrigering av Kommandorader
Den första metoden är att manuellt korrigera syntaxfelen i varje kommandorad i skriptet. Följ stegen nedan för att lösa dessa syntaxfel:
- Kör filen i terminalen genom att ange kommandot
./example.sh
och trycka på Enter. - Observera raderna som genererar ”oväntat token”-fel i resultatet.
- Åtgärda felet i varje rad individuellt genom att tillämpa de metoder som beskrivs nedan, och spara filen.
- Kör filen igen efter ändringarna för att säkerställa att syntaxfelet har åtgärdats.
Steg I: Visa Filens Innehåll
Första steget är att visa filens innehåll i terminalen. Om det finns problem med filen kan det vara svårt att se den. Vanligtvis körs filen med kommandot ./example.sh
, men detta gör det inte möjligt att ändra innehållet. Alternativen för att visa och ändra filens kommandorader för att korrigera ”oväntat token”-fel listas nedan.
Alternativ 1: Användning av cat
-kommandot
Använd cat
för att visa filen. Skriv kommandot cat -v example.sh
i terminalen.
Obs 1: Ersätt ”example.sh” med namnet på filen som genererar ”oväntat token”-fel.
Obs 2: cat -v
används för att visa dolda tecken, som vagnreturer eller icke-brytande mellanslag.
Alternativ 2: Användning av vx
-kommandot
Om cat
inte fungerar, använd vx
för att visa och ändra filens innehåll: sh -vx ./example.sh
Alternativ 3: Användning av od -a
-kommandot
Om dolda tecken orsakar problem, använd od -a
för att visa filen: od -a example.sh
Steg II: Ta bort Windows Radbrytningar
Windows-radbrytningar kan orsaka problem i skalskript. Ta bort dessa genom att kopiera kodraderna till en ny fil. Ange följande kommando i terminalen för att spara filens innehåll till en ny fil, t.ex. ’correctedexample.sh’:
tr -d '\r' < example.sh > correctedexample.sh
Steg III: Ställ in Behörigheter för Ny Fil
Ange behörighet för den nyskapade filen för att kunna redigera och köra filen i skalet. Skriv kommandot chmod 755 correctedexample.sh
för att ge filen körbar behörighet.
Steg IV: Formatera Koden i Filen
Formatera kodraderna individuellt och ändra kommandoraderna manuellt. Följande alternativ kan användas:
Alternativ 1: Ersätt enkla citattecken med dubbla citattecken
Ersätt enkla citattecken med dubbla citattecken. I ’example.sh’, ändra koden som str= "Första kommandoraden i "(exempelfil)" i skriptet"
.
Obs: Dubbla citattecken är nödvändiga för parametertypen str= "[(1,2),(3,4)]"
.
Alternativ 2: Lägg till $ till stränglinjer
Lägg till ’$’ till strängvärden för att korrigera syntaxfel. Ändra t.ex. str= $ 'Första kommandoraden i '(exempelfil)' i skriptet'
.
Obs: Genom att använda ’$’ i strängvärdet undviker du att använda escape-sekvensen.
Alternativ 3: Konvertera tabbar till mellanslag
Säkerställ att mellanrum i kommandorader är mellanslag och inte tabbar. Ändra t.ex. do echo kommando1; echo kommando2; echo kommando3; echo kommando4; done
till do echo command1; echo command2; echo command3; echo command4; done
.
Alternativ 4: Använd Escape-tecken
Använd escape-tecken (\
) med specialtecken i Bash. Till exempel, använd escape-tecken för parenteser som str= 'Första kommandoraden i \'(exempelfil)\' i skriptet'
.
Alternativ 5: Använd mellanslag mellan tecken
Använd mellanslag för att separera kommandon och satser. I koden saknas ett mellanslag mellan ’if’ och ’[’ i koden, ändra t.ex. if[ $day == "mon" ]
till if [ $day == "mon" ]
.
Alternativ 6: Använd kommandoseparator för satser
Separera olika kommandon med en kommandoseparator (;
) eller en ny rad. Ändra t.ex. if [ $day == "mon" ] sedan
till if [ $day == "mon" ]; sedan
.
Alternativ 7: Ta bort extra satser
Ta bort extra satser eller felaktig kodning i loopar. Ändra t.ex. for VARIABEL in {0..2}; sedan
till for VARIABLE in {0..2}; do echo command1; echo command2; echo command3; echo command4; done
Alternativ 8: Korrekt ordning för stängning av satser
Se till att loopar och villkorliga satser stängs i korrekt ordning. Korrigera koden som while true; do if [ $day == "mon" ]; then echo "mon"; else echo "inte mon"; fi; done
.
Metod 2: Skriv om koden
Om koden är kopierad och inklistrad, skriv om koden manuellt för att åtgärda fel. Dolda tecken och formateringsproblem i textredigerare som Microsoft Word kan orsaka fel.
Metod 3: Använd kommandot dos2unix
Om koden är skriven i Windows OS och körs i Cygwin kan du använda kommandot dos2unix
för att konvertera filen till Unix-format. Ange kommandot dos2unix example.sh
i terminalen.
***
Artikeln har beskrivit de grundläggande metoderna för att korrigera ”Bash syntaxfel nära oväntat token ’(’” i skript. Genom att följa dessa metoder kan du effektivt åtgärda syntaxfel. Om du tyckte att innehållet var användbart, får du gärna dela med dig av dina förslag och frågor i kommentarsfältet.