Napraw błąd składni Bash w pobliżu nieoczekiwanego tokena

Photo of author

By maciekx

W dzisiejszych czasach kodowanie w terminalu Linux Bash stało się powszechną praktyką w branży programistycznej. Programiści i studenci informatyki często napotykają różnego rodzaju błędy. Jeśli często widzisz komunikaty o błędach, takie jak „błąd składni w pobliżu nieoczekiwanego tokena '('” lub podobne, warto zastosować metody opisane w tym artykule. Pomogą one Ci stać się bardziej biegłym w kodowaniu w Bashu. Zapoznaj się z poniższymi wskazówkami w podanej kolejności, aby skutecznie usuwać błędy w swoich skryptach powłoki.

Jak Rozwiązać Błąd Składni Bash „Nieoczekiwany Token”?

Linux Bash to interpreter wiersza poleceń używany w systemach opartych na Linuksie, będący następcą powłoki Bourne Shell (sh). Pliki skryptów Bash mają rozszerzenie .sh. Błędy składni pojawiają się najczęściej, gdy w kodzie skryptu występują nieprawidłowości formatowania. Jeśli błąd dotyczy na przykład znaku „(„, powłoka wskaże konkretną linię i wyświetli odpowiedni komunikat. Bash, jako interpreter, po natrafieniu na błąd w linii, zatrzymuje dalsze przetwarzanie skryptu. Dlatego konieczne jest naprawienie błędu w danej linii, a następnie przejście do kolejnej, aż do usunięcia wszystkich nieoczekiwanych tokenów. Poniżej przedstawiamy najczęstsze przyczyny błędu składni „nieoczekiwany token” w Linux Bash:

  • Użycie sekwencji specjalnych: Nieprawidłowe zastosowanie sekwencji ucieczki lub znaków cudzysłowu w skrypcie Bash może prowadzić do błędów. Znaków specjalnych i cudzysłowów należy używać zgodnie z odpowiednią składnią.

  • Nieprawidłowa składnia: Błędy w strukturze kodu, na przykład niepoprawna kolejność pętli, mogą skutkować błędem składni.

  • Niepoprawne użycie poleceń: Używanie poleceń niezgodnie z ich przeznaczeniem, np. nieprawidłowe przypisywanie wartości, może wywołać błąd składni.

  • Niezgodność systemów: Skrypty działające poprawnie w systemach Unix mogą generować błędy w systemach DOS i odwrotnie.

  • Problemy ze skryptem: Skrypty przeniesione z innego systemu mogą zawierać ukryte błędy, które objawiają się jako „nieoczekiwany token”.

Rozważmy plik o nazwie `example.sh`, który został utworzony w skrypcie Linux Bash. Zawiera on typowe błędy składni, z którymi można się spotkać.

str= ‘Pierwsza linia poleceń ‘(przykład pliku)’ w skrypcie’
str= [(1,2),(3,4)]
if[ $day == “mon” ] then
 echo “mon”
else
 echo “nie 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 “nie mon”; done; fi

Metoda 1: Ręczne Poprawianie Błędów

Pierwszym sposobem na rozwiązanie problemu jest ręczne zlokalizowanie i naprawienie błędów w każdej linii kodu. Poniżej omówiono kroki, które pozwolą Ci uporać się z błędami składni w pobliżu nieoczekiwanego tokena. Uruchom plik w terminalu, wpisując ` ./example.sh` i naciśnij Enter.

2. Przeanalizuj komunikat błędu, zwracając uwagę na numery wierszy, w których występują nieoczekiwane tokeny.

3. Popraw każdy wiersz kodu, stosując metody opisane poniżej, a następnie zapisz zmiany w pliku.

4. Uruchom ponownie zmodyfikowany plik, aby sprawdzić, czy błąd został usunięty.

Krok I: Odczytanie Zawartości Pliku

Pierwszym krokiem w procesie naprawiania błędów składni jest odczytanie zawartości pliku. W przypadku problemów z plikiem, jego wyświetlenie może być utrudnione. Standardowo plik można uruchomić za pomocą polecenia ` ./example.sh`, jednak w ten sposób nie możemy edytować jego zawartości. Poniżej przedstawiono sposoby na podgląd i modyfikację pliku, aby naprawić błąd składni „nieoczekiwany token ('”.

Opcja 1: Za pomocą polecenia CAT

Możemy użyć polecenia `cat` do wyświetlenia zawartości pliku. Aby to zrobić, wpisz `cat –v example.sh` w terminalu.

Uwaga 1: Plik `example.sh` jest używany tylko w celach demonstracyjnych. W rzeczywistości należy podać nazwę pliku, w którym występuje błąd.

Uwaga 2: Polecenie `cat -v` służy do wyświetlania znaków niewidocznych, takich jak znaki powrotu karetki lub spacje nierozdzielające.

Opcja 2: Za pomocą polecenia VX

Alternatywnie można użyć polecenia `vx`, które pozwala na wyświetlanie i modyfikowanie pliku. Wpisz `sh -vx ./example.sh` w terminalu.

Opcja 3: Za pomocą polecenia `od -a`

Jeśli w pliku występuje wiele ukrytych znaków, można je wyświetlić za pomocą polecenia `od -a example.sh`. To narzędzie może pomóc w identyfikacji problemów z formatowaniem.

Krok II: Usunięcie Znaków Końca Linii Windows

Jeśli w skrypcie występują znaki końca linii charakterystyczne dla systemu Windows, można je usunąć, aby uniknąć problemów. W tym celu należy zapisać zawartość pliku do nowego pliku.

Wpisz poniższe polecenie w terminalu, aby zapisać zawartość pliku do nowego pliku `correctedexample.sh`, usuwając przy tym znaki końca linii z systemu Windows.

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

Krok III: Ustawienie Uprawnień Nowego Pliku

Aby edytować nowy plik i uruchamiać go w powłoce, konieczne jest ustawienie odpowiednich uprawnień. Użyj polecenia `chmod 755 correctedexample.sh` w terminalu. Teraz możesz otworzyć poprawiony plik i rozwiązać problemy z formatowaniem oraz błąd składni „nieoczekiwany token ('”.

Krok IV: Formatowanie Kodu

Kolejnym krokiem jest ręczne formatowanie każdej linii kodu. Poniżej przedstawiono metody formatowania pliku, aby usunąć błąd składni „nieoczekiwany token ('”.

Opcja 1: Zamiana Pojedynczych Cudzysłowów na Podwójne

Jeśli w kodzie używasz pojedynczych cudzysłowów, spróbuj zastąpić je podwójnymi. W pliku `example.sh` zmień linię zawierającą pojedyncze cudzysłowy na: `str= „Pierwsza linia poleceń „(przykład pliku)” w skrypcie”`.

Uwaga: Podwójne cudzysłowy są konieczne w przypadku wartości zawierających parametry, np. `str= „[(1,2),(3,4)]”`.

Opcja 2: Dodanie znaku `$` do Wartości Ciągów

W przypadku wartości ciągu znaków dodanie `$` przed wartością może rozwiązać problem. Zmień wiersz kodu na: `str= $ 'Pierwsza linia poleceń ‘(przykład pliku)’ w skrypcie’`.

Uwaga: Użycie `$` w wartości ciągu pozwala uniknąć znaków ucieczki odwrotnego ukośnika i upraszcza kodowanie.

Opcja 3: Zamiana Tabulatorów na Spacje

Upewnij się, że odstępy w kodzie to spacje, a nie tabulatory. Jeśli błąd występuje w środowisku Cygwin, konwersja tabulatorów na spacje może pomóc. Poniżej przedstawiono przykład nieprawidłowego użycia tabulatorów:

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

Poprawiona wersja wygląda następująco:

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

Opcja 4: Użycie Znaków Ucieczki

Jeśli używasz znaków specjalnych Bash, takich jak nawiasy `()`, musisz użyć znaku ucieczki `\`. Poprawne użycie znaku ucieczki wygląda następująco: `str= „Pierwsza linia poleceń \”(przykład pliku)\” w skrypcie”`.

Opcja 5: Użycie Spacji Między Znakami

Skrypt powłoki rozpoznaje polecenia i instrukcje na podstawie domyślnych ustawień. Używaj spacji, aby oddzielać elementy w kodzie. Brak spacji między `if` i `[` sprawi, że powłoka nie rozpozna `if[` jako prawidłowej instrukcji. Poprawnie użyta składnia wygląda następująco: `if [ $day == „mon” ]`.

Opcja 6: Użycie Separatora Poleceń

Instrukcje w skrypcie muszą być od siebie oddzielone. Użyj średnika `;` lub nowej linii, aby oddzielić poszczególne polecenia. W przykładzie `if [ $day == „mon” ] then` należy zmienić na `if [ $day == „mon” ]; then`, aby uniknąć błędów. Średnik `;` jest tutaj separatorem między `[` a `then`.

Opcja 7: Usunięcie Dodatkowych Instrukcji

W skomplikowanych skryptach zagnieżdżonych pętli mogą pojawić się dodatkowe instrukcje lub nieprawidłowa składnia. Należy upewnić się, że konstrukcje `for…done` i `if…fi` są poprawne. W przykładowym skrypcie pętla `for` zawiera wyraz `then`, który jest właściwy dla instrukcji `if`. Usunięcie zbędnego `then` rozwiąże problem. Poprawna składnia wygląda następująco:

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

Opcja 8: Poprawna Kolejność Zamykania Instrukcji

W skryptach zawierających zagnieżdżone pętle lub instrukcje warunkowe, upewnij się, że są one zamykane w odwrotnej kolejności, w jakiej zostały otwarte. Użycie separatora nowej linii może ułatwić uniknięcie problemów z zagnieżdżonymi pętlami. Kolejność zamykania pętli i instrukcji warunkowych musi być prawidłowa. W przykładowym kodzie `while true; do if [ $day == „mon” ]; then echo „mon”; else echo „nie mon”; done; fi` kolejność zamykania jest niepoprawna. Poprawny zapis wygląda następująco:

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

Metoda 2: Przepisanie Kodu

Jeśli skopiowałeś kod do nowego pliku w terminalu, możesz spróbować przepisać go ręcznie, aby wyeliminować błędy. Często błędy formatowania generowane w edytorze tekstu, takim jak Microsoft Word, mogą powodować problemy.

Metoda 3: Użycie polecenia `dos2unix.exe`

Systemy Unix używają znaku `\n`, aby przejść do nowej linii, podczas gdy systemy Windows używają kombinacji `\r\n`. Jeśli uruchomisz kod napisany w Windows na Cygwinie, możesz otrzymać błąd składni „nieoczekiwany token ('”.

Aby naprawić problem, użyj narzędzia wiersza poleceń `dos2unix.exe`, które konwertuje znaki końca linii z Windows na Unix. Wpisz `dos2unix.exe example.sh` w terminalu, aby przekonwertować plik.

***

W tym artykule omówiono metody naprawiania błędów składni „nieoczekiwany token '('” w skryptach Bash. Zaprezentowane rozwiązania pomogą Ci skutecznie rozwiązywać problemy w kodzie. Jeśli uważasz ten artykuł za przydatny, podziel się swoimi opiniami i pytaniami w sekcji komentarzy.


newsblog.pl