Remediați eroarea de sintaxă Bash aproape de simbolul neașteptat

Rezolvarea erorilor de sintaxă în Bash: Ghid detaliat

Codificarea în terminalul Linux Bash este o practică fundamentală în dezvoltarea software. Atât inginerii software, cât și studenții care învață programare, se confruntă adesea cu diverse erori. Dacă întâmpinați în mod repetat erori precum „Eroare de sintaxă lângă simbolul neașteptat ‘(‘” sau „Eroare de sintaxă Bash lângă simbolul neașteptat”, acest articol vă va oferi metode eficiente pentru a deveni un codificator mai competent. Vă recomandăm să parcurgeți metodele prezentate în ordinea descrisă pentru a identifica și corecta erorile din scripturile dumneavoastră.

Înțelegerea erorilor de sintaxă în Bash

Linux Bash funcționează ca un interpret de linie de comandă în sistemele Linux, fiind un succesor al Bourne Shell (sh). Scripturile Bash sunt, de regulă, salvate cu extensia .sh. Erorile de sintaxă apar atunci când există probleme de formatare sau structură în codul scriptului shell. Dacă eroarea este localizată în apropierea caracterului „(„, interpretorul va semnala linia cu pricina și va afișa eroarea, oprind executarea comenzilor ulterioare. Prin urmare, este crucial să corectați erorile pas cu pas, începând cu prima linie problematică.

Cauzele frecvente ale erorilor de sintaxă în Bash, în special cele legate de simboluri neașteptate, sunt următoarele:

  • Secvențe de escape incorecte: Utilizarea necorespunzătoare a secvențelor de escape sau a ghilimelelor în script poate duce la erori. Aceste elemente trebuie formatate corect pentru a evita problemele.
  • Sintaxă incorectă a comenzilor: Scrierea greșită a comenzilor, cum ar fi modificarea ordinii buclelor, poate provoca erori de sintaxă.
  • Utilizarea incorectă a comenzilor: Atribuirea eronată a valorilor sau folosirea greșită a comenzilor generează erori de sintaxă.
  • Incompatibilități între sisteme: Scripturile shell pot fi incompatibile între sistemele Unix și DOS, ducând la erori.
  • Probleme în scripturi copiate: Scripturile copiate de pe un alt sistem pot genera erori datorită unor detalii de formatare sau codificare neconcordante.

Pentru a exemplifica aceste erori, vom utiliza un fișier numit „example.sh” care conține câteva linii de comandă susceptibile de erori, acoperind diverse situații tipice:

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

Metoda 1: Corectarea manuală a erorilor

Prima abordare constă în corectarea manuală a fiecărei linii de comandă din script. Următorii pași vă vor ghida prin acest proces:

  1. Rulați scriptul în Terminal utilizând comanda ./example.sh.
  2. Analizați mesajele de eroare pentru a identifica liniile cu probleme.
  3. Corectați fiecare eroare conform metodelor descrise mai jos, salvând fișierul după fiecare modificare.
  4. Rulați scriptul din nou pentru a verifica dacă toate erorile au fost rezolvate.

Pasul I: Vizualizarea conținutului fișierului

Primul pas este verificarea conținutului fișierului. Dacă fișierul este corupt sau neinteligibil, va trebui să-l vizualizați cu una dintre următoarele metode:

Opțiunea 1: Comanda CAT

Folosiți comanda cat -v example.sh pentru a vizualiza fișierul. Opțiunea -v afișează caracterele invizibile, cum ar fi spațiile fără întrerupere.

Notă 1: Înlocuiți example.sh cu numele fișierului dumneavoastră.

Notă 2: cat -v este utilă pentru a detecta caracterele invizibile care ar putea cauza probleme.

Opțiunea 2: Comanda VX

Dacă cat nu funcționează, încercați sh -vx ./example.sh pentru a vizualiza și a modifica comenzile.

Opțiunea 3: Comanda od -a

Utilizați od -a example.sh pentru a vizualiza fișierul, în special pentru caracterele invizibile din liniile de comandă.

Pasul II: Eliminarea întreruperilor de linie Windows

Dacă scriptul conține întreruperi de linie Windows, utilizați următoarea comandă pentru a le elimina și salvați conținutul într-un fișier nou:

tr -d '\r' < example.sh > correctedexample.sh

Pasul III: Setarea permisiunilor

Setați permisiunile pentru fișierul nou utilizând chmod 755 correctedexample.sh. Acest lucru va permite executarea fișierului.

Pasul IV: Formatarea codului

Următoarele metode ajută la formatarea codului pentru a elimina erorile de sintaxă:

Opțiunea 1: Înlocuirea ghilimelelor simple cu duble

Ghilimelele simple pot cauza probleme, înlocuiți-le cu ghilimele duble. De exemplu, modificați str= ‘First command line of ‘(example file)’ in the script’ în str= "First command line of (example file) in the script".

Notă: Ghilimelele duble sunt necesare pentru parametrii precum str= "[(1,2),(3,4)]".

Opțiunea 2: Adăugarea $ la șiruri

Adăugați $ înaintea valorilor de șir pentru a evita erorile. De exemplu, modificați str= ‘First command line of ‘(example file)’ in the script’ în str= $‘First command line of ‘(example file)’ in the script’.

Notă: Folosind $, puteți evita utilizarea ghilimelelor duble în locul celor simple.

Opțiunea 3: Conversia taburilor în spații

Asigurați-vă că folosiți spații în loc de taburi între instrucțiuni. De exemplu, înlocuiți:

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

cu:

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

Opțiunea 4: Utilizarea caracterelor de escape

Utilizați caracterul de escape \ pentru caractere speciale Bash, cum ar fi parantezele. De exemplu, str= „First command line of „(example file)” in the script” nu va da eroare, deoarece parantezele sunt escape-uite.

Opțiunea 5: Utilizarea spațiilor corecte

Asigurați-vă că folosiți corect spațiile între caractere. De exemplu, în if[ $day == “mon” ] nu există spațiu între if și [, ceea ce cauzează o eroare. Modificați în if [ $day == “mon” ].

Opțiunea 6: Separarea comenzilor

Separați comenzile prin punct și virgulă sau linii noi. De exemplu, înlocuiți if [ $day == “mon” ] then cu if [ $day == “mon” ]; then.

Opțiunea 7: Eliminarea instrucțiunilor suplimentare

Eliminați instrucțiunile suplimentare, mai ales în buclele imbricate. De exemplu, corectați bucla for eliminând then:

for VARIABLE in {0..2}; do echo command1; echo command2; echo command3; echo command4; done

Opțiunea 8: Asigurarea ordinii de închidere a instrucțiunilor

Verificați ordinea corectă de închidere a buclelor și a instrucțiunilor condiționale. De exemplu, corectați:

while true; do if [ $ day == “mon” ];  apoi ecou „mon”;  else ecou „nu mon”;  Terminat;  fi

în:

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

Metoda 2: Rescrierea codului

Dacă ați copiat codul, încercați să îl rescrieți manual pentru a elimina erorile de formatare sau caracterele ascunse din editori de text precum Microsoft Word.

Metoda 3: Utilizarea comenzii dos2unix.exe

Dacă lucrați cu un sistem Unix, comanda dos2unix.exe vă permite să convertiți fișierele text scrise în Windows (unde se folosesc caracterele \r\n pentru linii noi) în format Unix (unde se folosește doar \n). Utilizați comanda dos2unix.exe example.sh în terminal pentru a converti fișierul.

Acest articol a prezentat metodele de bază pentru corectarea erorilor de sintaxă Bash. Dacă ați găsit acest conținut util, nu ezitați să lăsați sugestii și întrebări în secțiunea de comentarii.