Obsługa błędów i status wyjścia
Zaimplementuje Pan/Pani solidne sprawdzanie błędów w skryptach, poznając statusy wyjścia oraz używając „set -e” i logiki warunkowej.
Obsługa błędów i status wyjścia to bezpłatna lekcja Linux Command Line & Bash Scripting Mastery na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Linux Command Line & Bash Scripting Mastery, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Linux Command Line & Bash Scripting Mastery zawiera 4 lekcji w sumie.
Wprowadzenie do obsługi błędów
W tej lekcji zwiększymy niezawodność skryptów Bash, ucząc się skutecznej obsługi błędów.
Wyobraźmy sobie skrypt wykonujący wiele kroków. Jeśli jeden z nich się nie powiedzie, chcieliby Państwo, aby skrypt się zatrzymał albo przynajmniej poinformował o awarii, prawda? Właśnie do tego służy obsługa błędów!
Czym jest status wyjścia?
Każde polecenie uruchamiane w powłoce Linux zwraca status wyjścia (nazywany czasem kodem wyjścia lub kodem zwracanym).
- Status 0 oznacza, że polecenie zakończyło się pomyślnie.
- Status różny od zera (np. 1, 2 lub 127) wskazuje na pewien rodzaj niepowodzenia lub błąd.
To jak sygnalizacja świetlna dla poleceń!
Ręczne sprawdzanie statusu wyjścia
Status ostatnio wykonanego polecenia można sprawdzić za pomocą specjalnej zmiennej $?.
Wypróbujmy polecenie zakończone powodzeniem oraz takie, które zakończy się niepowodzeniem:
#!/bin/bash
echo "Hello CoddyKit"
echo "Exit status: $?"
ls non_existent_file.txt
echo "Exit status: $?"Podstawowe warunkowe sprawdzanie błędów
Znajomość statusu wyjścia pozwala skryptowi podejmować decyzje. Można użyć instrukcji if, aby sprawdzić $? i zareagować na błędy.
Dzięki temu skrypt rozpoznaje problemy i nie kontynuuje działania z nieprawidłowymi danymi.
#!/bin/bash
ls non_existent_file.txt
if [ $? -ne 0 ]; then
echo "Error: The 'ls' command failed!"
exit 1 # Exit script with an error code
fi
echo "This line will not run if 'ls' fails."Możliwości `set -e`
Ręczne sprawdzanie $? po każdym poleceniu może być uciążliwe. W takiej sytuacji przydaje się set -e!
Po uruchomieniu skryptu z set -e Bash natychmiast zakończy działanie, jeśli dowolne polecenie (niebędące częścią testu warunkowego) zakończy się statusem różnym od zera.
To globalny wyłącznik bezpieczeństwa dla skryptów!
`set -e` w działaniu
Zobaczmy, jak set -e uniemożliwia skryptowi kontynuowanie działania po wystąpieniu błędu. Proszę zwrócić uwagę, że końcowe polecenie echo nigdy nie zostaje wykonane.
#!/bin/bash
set -e
echo "Starting important tasks..."
# This command will fail
cp /non_existent_source /tmp/destination
echo "This line will NOT be printed if 'cp' fails."
echo "All tasks completed successfully."Kiedy `set -e` nie zatrzymuje skryptu
set -e jest potężnym narzędziem, ale obowiązują dla niego określone zasady. Nie spowoduje zakończenia skryptu, jeśli nieudane polecenie jest:
- częścią warunku
iflubwhile; - częścią listy
&&lub||(z wyjątkiem ostatniego polecenia); - poprzedzone przez
!.
Konteksty te służą do sprawdzania powodzenia lub niepowodzenia, dlatego `set -e` nie zakłóca ich działania.
Łączenie `set -e` z `||`
Czasami przed zakończeniem działania chcą Państwo wyświetlić własny komunikat o błędzie. Można połączyć set -e z operatorem || (LUB).
command || { echo "Error message"; exit 1; }
Jeśli command zakończy się niepowodzeniem, wykona się część po ||, wyświetli komunikat, a następnie zakończy działanie z określonym kodem błędu.
#!/bin/bash
set -e
echo "Attempting to find a file..."
find /non_existent_dir -name "*.txt" || \
{ echo "ERROR: Could not search in /non_existent_dir!"; exit 1; }
echo "Script continued (this won't print if 'find' fails)."Obsługa określonych kodów wyjścia
Choć 0 oznacza powodzenie, a wartość różna od zera — niepowodzenie, poszczególne kody różne od zera mogą mieć różne znaczenia.
1: błąd ogólny.2: nieprawidłowe użycie wbudowanych poleceń powłoki.127: nie znaleziono polecenia.
Można użyć if [ $? -eq 127 ], aby sprawdzić konkretny rodzaj niepowodzenia i wyświetlić bardziej dopasowany komunikat o błędzie.
Quiz z obsługi błędów
Które z poniższych stwierdzeń dotyczących statusów wyjścia Bash i obsługi błędów jest PRAWDZIWE?
Podsumowanie: niezawodne skrypty
Nauczyli się Państwo, jak znacznie zwiększyć niezawodność skryptów Bash!
- Każde polecenie zwraca status wyjścia (0 oznacza powodzenie, a wartość różna od zera — niepowodzenie).
- Zmienna
$?zawiera status wyjścia ostatniego polecenia. set -eto potężne narzędzie, które automatycznie kończy działanie skryptu po większości nieudanych poleceń.- Połącz
set -ez||, aby wyświetlać własne komunikaty o błędach.
Stosowanie tych technik pomoże Państwu pisać bardziej profesjonalne i stabilne skrypty.
Często zadawane pytania
Czy lekcja „Obsługa błędów i status wyjścia” jest bezpłatna?
Tak — pełny tekst „Obsługa błędów i status wyjścia” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Linux Command Line & Bash Scripting Mastery, przejdź na CoddyKit PRO. Kurs Linux Command Line & Bash Scripting Mastery zawiera 4 lekcji w sumie.
Co nauczysz się w „Obsługa błędów i status wyjścia”?
Zaimplementuje Pan/Pani solidne sprawdzanie błędów w skryptach, poznając statusy wyjścia oraz używając „set -e” i logiki warunkowej. Ćwiczysz Linux Command Line & Bash Scripting Mastery z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Linux Command Line & Bash Scripting Mastery?
Nie wymagamy żadnego doświadczenia. Linux Command Line & Bash Scripting Mastery w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Obsługa błędów i status wyjścia”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Linux Command Line & Bash Scripting Mastery?
Tak. Każda lekcja Linux Command Line & Bash Scripting Mastery zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Debugowanie skryptów Bash (set -x, trap)
- Obsługa błędów i status wyjścia
- Najlepsze praktyki skryptowania i linting
- Testowanie skryptów Bash za pomocą Bats