Bash-syntaxisfout repareren in de buurt van onverwacht token

Coderen in de Linux Bash Terminal is een overheersende praktijk geworden in de codeersector. De software-ingenieurs en studenten die de codeertaal leren, komen verschillende fouten tegen. Als u herhaaldelijk fouten hebt gezien, zoals Syntaxisfout bijna onverwacht token ‘(‘ of Bash-syntaxisfout bijna onverwacht token, kunt u proberen te vertrouwen op de methoden die in het artikel worden beschreven en een bekwame codeur worden. Lees de methoden die worden beschreven in het artikel in de volgorde beschreven en herstel de fouten in de opdrachtregels in uw bestand.

Bash-syntaxisfout oplossen in de buurt van onverwacht token

Linux Bash is een opdrachtregelinterpreter voor het op Linux gebaseerde systeem en is een vervanging voor de Bourne Shell of sh. De bestanden krijgen een naam in het .sh-formaat in de Linux Bash-scripting. Als er opmaakproblemen zijn in de code in het shellscript, kan er een syntaxisfout optreden. Als de fout dicht bij het teken ( ligt, zal de shell u naar de fout in de regel vragen en de fout in de corresponderende regel weergeven. Aangezien de Linux Bash een interpreter is, wordt de regel met de fout naar u teruggestuurd in de Terminal en het zal stoppen met het scannen van de rest van de opdrachten in het script. Daarom moet u de fout in de specifieke opdrachtregel herstellen en doorgaan naar de volgende om de onverwachte tokenfout in het shellscript op te lossen. De oorzaken van de syntaxis fout bijna onverwacht token in de Linux Bash worden hieronder in deze sectie vermeld, zoals hieronder:

  • Coderen met escape-reeksen- Als u de codes in Bash-scripting hebt geschreven, kunnen de escape-reeksen of de aanhalingstekens in het script fouten veroorzaken. De escape-reeksen en aanhalingstekens moeten in het juiste formaat worden geschreven om de fout te herstellen.

  • Onjuiste syntaxis in het coderingsbestand – De syntaxis in de code kan de syntaxisfout geven als de opdracht in de verkeerde syntaxis is geschreven, zoals het wijzigen van de volgorde van lussen.

  • Verkeerd gebruik van de opdracht- Als u de opdracht niet correct gebruikt, zoals onjuiste waardetoewijzing, is er mogelijk een syntaxisfout.

  • Incompatibel besturingssysteem in de systemen- Als de shell voor het codeerscript niet compatibel is tussen de Unix- en DOS-systemen, kan er een onverwachte fout optreden.

  • Problemen in het bash-shellscript – De problemen die worden uitgevoerd in het bash-shellscript op het bestand dat van een ander systeem is gekopieerd, kunnen de onverwachte tokenfout veroorzaken.

Overweeg een bestand met de naam example.sh gemaakt in de Linux Bash-scripting met de volgende opdrachtregels voor verklarende doeleinden. Het voorbeeldbestand heeft de mogelijkheid voor syntaxisfouten en bevat alle mogelijke commando’s die in het shellscript kunnen worden gebruikt.

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

Methode 1: Handmatig fouten in elke opdrachtregel herstellen

De eerste methode om de fouten op te lossen, is door de syntaxisfout handmatig op elke opdrachtregel in het script op te lossen. De stappen om de syntaxisfouten in de buurt van een onverwacht token in de opdrachtregels op te lossen, worden in deze sectie besproken. Het proces om de onverwachte tokenfout in de Terminal op te lossen, wordt hieronder beschreven. Voer het bestand uit in de Terminal door de opdracht ./example.sh te typen en op Enter te drukken.

2. Let op de regels met de onverwachte tokenfout in de opdrachtregels in het onderstaande resultaat.

3. Los de fout in elke regel op door de hieronder besproken methoden afzonderlijk te volgen en het bestand op te slaan.

4. Voer het bestand opnieuw uit na de wijzigingen en controleer of de syntaxisfout in het bestand is opgelost.

Stap I: Inhoud van bestand lezen

De eerste stap om de syntaxisfout in de opdrachtregels op te lossen, is door het bestand in de Terminal te lezen. ALS er problemen zijn met het bestand, kunt u het bestand mogelijk niet bekijken. Het is gebruikelijk om het bestand te bekijken door het bestand uit te voeren met het commando ./example.sh, maar u kunt de inhoud van het bestand niet wijzigen. De opties om de inhoud van het bestand te bekijken en de opdrachtregels te wijzigen om de syntaxisfout bijna onverwacht token ‘(‘ te herstellen, worden hieronder besproken.

Optie 1: via CAT-opdracht

De eerste optie is om de opdracht cat te gebruiken om het bestand in het shellscript te bekijken. Lees de inhoud van het bestand met de onverwachte tokenfout met de opdracht cat door de opdracht cat –v example.sh in de Terminal te typen.

Opmerking 1: Het voorbeeld.sh wordt gebruikt voor verklarende doeleinden en u moet de naam typen van het bestand met de onverwachte tokenfout.

Opmerking 2: Het commando cat –v wordt gebruikt om alle onzichtbare tekens weer te geven die waarschijnlijk de regelterugloop of no-break spatie vertegenwoordigen.

Optie 2: Via VX Command

Als u het cat-commando niet kunt gebruiken, kunt u proberen het vx-commando te gebruiken om de commando’s in het bestand te bekijken en te wijzigen met behulp van de onderstaande stap. Typ de opdracht sh –vx ./example.sh in de Terminal om het bestand te openen.

Optie 3: Via od -a Commando

3. Als er een paar onzichtbare tekens in de opdrachtregels staan, kunt u de opdracht od –a gebruiken om het bestand te bekijken. Als de inhoud van het bestand niet zichtbaar is in het codebestand, kunt u proberen het bestand te lezen met het commando od –a example.sh om de code te wijzigen.

Stap II: Windows-regelonderbrekingen verwijderen

Als er Windows-regeleinden in het shellscript zijn, kunt u de console-opdrachten gebruiken om de regeleinden te verwijderen en de coderegels naar een nieuw bestand te kopiëren om de fout te herstellen.

Voer de volgende opdracht in de Terminal in om de inhoud van het bestand op te slaan in een ander bestand met de naam correctdexample.sh om de Windows-regeleinden in het script te verwijderen.

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

Stap III: machtigingen instellen voor een nieuw gemaakt bestand

U moet de toestemming voor het nieuw gemaakte bestand instellen om het bestand te bewerken, zodat het bestand in de shell kan worden uitgevoerd. Typ de opdracht als chmod 755 correctdexample.sh in de Terminal om de machtigingen voor het bestand te geven en voer het bestand uit. U kunt nu het gecorrigeerde bestand bekijken en de opmaakproblemen oplossen en de syntaxisfout in de buurt van het onverwachte token ‘(‘ in het bestand oplossen.

Stap IV: Code opmaken in het bestand

De tweede stap is om de coderegels afzonderlijk op te maken en de opdrachtregels handmatig in het bestand te wijzigen. De opties om het bestand te formatteren om de syntaxisfout bij onverwachte token ‘(‘ te herstellen, worden hieronder in deze sectie besproken.

Optie 1: Vervang enkele aanhalingstekens door dubbele aanhalingstekens

Als u de enkele aanhalingstekens in de opdrachtregels gebruikt, moet u de opdracht wijzigen door de enkele aanhalingstekens te vervangen door dubbele aanhalingstekens om de syntaxisfout te herstellen. Verwijder in het bestand example.sh de coderegels met ‘ en ‘ of de enkele aanhalingstekens in de opdracht en vervang de enkele aanhalingstekens door de dubbele aanhalingstekens of de ” en ”. Hier, in het voorbeeldbestand, moet u de code wijzigen als str = “Eerste opdrachtregel van “(voorbeeldbestand)” in het script”

Opmerking: de dubbele aanhalingstekens zijn nodig voor de commando’s van het parametertype, zoals str= “[(1,2),(3,4)]”.

Optie 2: $ toevoegen aan tekenreeksregels

Als u tekenreekswaarden aan het script hebt toegevoegd, moet u een $ toevoegen aan de tekenreekswaarden om de syntaxisfout in het script te herstellen. Voeg de $ voor de opdrachtregels toe aan de tekenreekswaarden om de onverwachte fout op te lossen. Verander hier, in het voorbeeldbestand, de opdrachtregel als;

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

Opmerking: als u de $ in de tekenreekswaarde gebruikt, kunt u de backslash-escapereeks omzeilen, aangezien de opdrachtregels worden gedecodeerd door de ANSI C-standaard. Met andere woorden, door een $ te gebruiken voor tekenreekswaarde, kunt u voorkomen dat u dubbele aanhalingstekens gebruikt in plaats van enkele aanhalingstekens in de opdrachtregels.

Optie 3: converteer tabbladen naar spaties

De spaties die u tussen twee instructies in de opdracht hebt gelaten, moeten spaties zijn in plaats van tabs om de syntaxisfout in het script te herstellen. Als u de fout op Cygwin krijgt, kunt u proberen de tabbladen in de codes om te zetten in spaties om de fout op te lossen. De opdrachtregel wordt hieronder gegeven als;

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

De bovenstaande opdracht moet worden herschreven zoals hieronder wordt weergegeven om de fout op te lossen.

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

Optie 4: Escape-tekens gebruiken

Als u een bash-teken gebruikt, is het belangrijk om samen met het bash-teken een escape-teken te gebruiken om de syntaxisfout te herstellen. De haakjes of () zijn bash-speciale tekens in het bestand, daarom zou u het escape-teken of de backslash in de opdrachtregel moeten gebruiken om te ontsnappen aan de normale tekens om de opdracht uit te voeren. De str= ‘Eerste opdrachtregel van ‘(voorbeeldbestand)’ in het script’-commando zou geen fout geven in de Terminal omdat het escape-teken wordt gebruikt.

Optie 5: Gebruik spatie tussen tekens

Het shellscript herkent de opdrachten en instructies in het script aan de hand van de standaardwaarden. U moet ervoor zorgen dat de ruimte tussen tekens correct wordt gebruikt, zodat de shell de opdracht in het script kan identificeren. De spatie is een teken dat wordt gebruikt om twee tekens op de opdrachtregel te onderscheiden. In de code is er geen spatie tussen de if en [, 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” ]; dan kan de fout worden opgelost als de shell bulletin-opdracht als deze wordt geïdentificeerd door de shell.

Optie 6: Command Separator gebruiken voor verklaringen

De verschillende commando’s in het shellscript moeten worden gescheiden in instructies zodat de Terminal individuele commando’s kan identificeren. U moet een opdrachtscheidingsteken gebruiken om de syntaxisfout in de Linux Bash te herstellen. De instructies in de opdracht moeten worden gescheiden door een opdrachtscheidingsteken zoals een puntkomma of een ; of een nieuwe regel door op de Enter-toets te drukken. Bijvoorbeeld het commando in de code if [ $ day == “mon” ] moet dan worden gewijzigd alsof [ $ day == “mon” ]; om vervolgens de fout te herstellen. Aangezien de puntkomma wordt gebruikt als opdrachtscheidingsteken tussen de tekens [ 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” ]; echo dan “mon”; anders echo “niet ma”; gedaan; fi moet in de juiste volgorde worden gesloten. Het wijzigen van de code zoals hieronder wordt weergegeven, kan de onverwachte tokenfout oplossen als de volgorde van het sluiten van de instructies wordt gecorrigeerd.

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

Methode 2: Code herschrijven

Als u de code hebt gekopieerd en in een nieuw bestand op de Terminal geplakt, kunt u proberen de code handmatig te herschrijven om de fout te herstellen. De fouten in de code kunnen worden hersteld als u de code hebt geschreven zonder formaatfouten in het shellscript. Dit komt omdat de verborgen tekens en de opmaakproblemen in de teksteditor zoals Microsoft Word, die u mogelijk hebt gebruikt om de code te kopiëren en te plakken, mogelijk de fout hebben gegeven.

Methode 3: Gebruik de opdracht Dos2unix.exe

Als u een Unix-besturingssysteem gebruikt, kunt u codes schrijven met het regelinvoerteken als n om naar de volgende regel in het bestand te gaan. Als u echter een Windows-besturingssysteem gebruikt, moet u naar de volgende regel in de code gaan met de regelterugloop en regelinvoer of de rn in het bestand. Als u de code uitvoert die is geschreven in het Windows-besturingssysteem in de Cygwin, krijgt u mogelijk de syntaxisfout bijna onverwacht token ‘(‘.

Om de fout op te lossen, moet u de regelteruglooptekens wissen met behulp van de DOS naar Unix-opdrachtregeltool als conversieprogramma voor tekstbestandsindelingen. Typ de volgende opdracht als dos2unix.exe example.sh in de Terminal en u kunt het bestand converteren naar het Unix-formaat.

***

Het artikel heeft de basismethoden besproken om Bash-syntaxisfout in de buurt van onverwacht token ‘(‘ in het script te herstellen. Als u een Linux Bash gebruikt, kunt u de methoden gebruiken die in deze sectie worden uitgelegd om Bash-syntaxisfout in de buurt van onverwacht token op te lossen. Als u het hele artikel hebt gelezen en de inhoud nuttig vond, laat ons uw suggesties en vragen weten in het opmerkingengedeelte.

  FX op Hulu wordt vandaag gelanceerd: dit is wat u moet weten

gerelateerde berichten