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:
- Rulați scriptul în Terminal utilizând comanda
./example.sh
. - Analizați mesajele de eroare pentru a identifica liniile cu probleme.
- Corectați fiecare eroare conform metodelor descrise mai jos, salvând fișierul după fiecare modificare.
- 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.