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
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.