Bash Wykrywanie błędów i obsługi wskazówek i sztuczek
- 2002
- 255
- Maurycy Napierała
Aby wykryć i obsługiwać błędy w skrypcie Bash, możesz użyć „Set -e”
I 'pułapka'
polecenia, a także 'Jeśli'
I 'sprawa'
stwierdzenia i „||”
I „&&”
operatorzy.
Możesz użyć polecenia Set -e na początku swojego skryptu, aby włączyć to zachowanie, lub możesz go użyć przed poszczególnymi poleceniami, aby włączyć je tylko dla tych poleceń.
Należy zauważyć, że „Set -e”
polecenie wpływa tylko na status wyjścia poszczególnych poleceń. Nie obejmuje błędów spowodowanych błędami składniowymi lub innymi problemami w samym skrypcie. Aby złapać tego rodzaju błędy, możesz użyć „Set -o”
Zamiast tego opcja errexit.
Zobaczmy kilka przykładów:
-
„Set -e”
Polecenie każe Bashowi natychmiast wyjść, jeśli polecenie zwróci status wyjścia niezerowego. Jest to przydatne do wykrywania i obsługi błędów w skrypcie. Na przykład: #!/bin/bash set -e # Niektóre polecenia, które mogą nie upaść komendy 1 polecenie 2 # Ten wiersz zostanie osiągnięty tylko wtedy, gdy wszystkie powyższe polecenia uda im się echo „wszystkie polecenia zakończone pomyślnie”12345678910 #!/bin/bash set -e # Niektóre polecenia, które mogą porażić się na poziom Jeśli polecenie 1 lub Command2 zwróci niezerowy status wyjścia, skrypt wyjdzie natychmiast, a linia echo „Wszystkie polecenia zakończone pomyślnie” nie zostaną wykonane.
- Możesz także użyć
„||”
operator, aby uruchomić inne polecenie, jeśli poprzednia nie powiodła się. #!/bin/bash set -e # Niektóre polecenia, które mogą nie upaść polecenia 1 || echo „Command1 nie powiodło się”; Wyjście 1; Command2 || echo „Command2 nie powiodło się”; Wyjście 1; # Ta linia zostanie osiągnięta tylko wtedy, gdy wszystkie powyższe polecenia uda mi się echo „Wszystkie polecenia zakończone pomyślnie”12345678910 #!/bin/bash set -e # Niektóre polecenia, które mogą porażić się na terenCommand1 || echo „Command1 nie powiodło się”; Wyjście 1; Command2 || echo „Command2 nie powiodło się”; Wyjście 1; W tym przykładzie || Operator służy do wykonywania polecenia lub bloku następujących poleceń, jeśli poprzednie polecenie się nie powiedzie. Polecenie wyjścia 1 służy do wyjścia ze skryptu o niezerowym statusie wyjścia, wskazując błąd.
-
'pułapka'
Polecenie pozwala określić polecenie lub serię poleceń, gdy odbiera konkretny sygnał. Możesz użyć tego do złapania błędów i wykonywania zadań o czyszczeniu, takich jak usuwanie plików tymczasowych lub odwracanie zmian. Na przykład: #!/bin/bash set -e # Utwórz plik tymczasowy temp_file = $ (MKTEMP) # Usuń plik tymczasowy na pułapce wyjściowej 'rm -f $ temp_file' exit # niektóre polecenia, które mogą nie upaść polecenia 1 || echo „Command1 nie powiodło się”; Wyjście 1; Command2 || echo „Command2 nie powiodło się”; Wyjście 1; # Ta linia zostanie osiągnięta tylko wtedy, gdy wszystkie powyższe polecenia uda mi się echo „Wszystkie polecenia zakończone pomyślnie”12345678910111213141516 #!/bin/bash set -e # Utwórz tymczasowy filetemp_file = $ (MKTEMP) # Usuń plik tymczasowy na exittrap 'rm -f $ temp_file' exit # niektóre polecenia, które mogą porażić się echo „Command1 nie powiodło się”; Wyjście 1; Command2 || echo „Command2 nie powiodło się”; Wyjście 1; W tym przykładzie polecenie pułapki określa, że
„rm -f $ temp_file”
polecenie powinno być wykonywane, gdy skrypt odbędzie 'WYJŚCIE' sygnał. Zapewnia to usunięcie pliku tymczasowego, nawet jeśli skrypt wychodzi z powodu błędu. - Możesz użyć
'Jeśli'
I'sprawa'
stwierdzenia do wykonywania różnych działań w oparciu o status wyjścia polecenia. Na przykład: #!/bin/bash set -e # niektóre polecenia, które mogą się nie udać, jeśli polecenie1; Następnie echo „Command1” zastąpił „Else Echo” Command1 Faid „Exit 1 fi case” $ (command2) „in„ Success ”) echo„ Command2 ”;; „Niepowodzenie”) echo „Command2 nie powiodło się”; wyjście 1 ;; ESAC # Ten wiersz zostanie osiągnięty tylko wtedy, gdy wszystkie powyższe polecenia odniesie sukces „Wszystkie polecenia zakończone pomyślnie”12345678910111213141516171819 #!/bin/bash set -e # Niektóre polecenia, które mogą awaria polecenie 1; Następnie echo „Command1” zastąpił „Else Echo” Command1 Faid „Exit 1fi case” $ (command2) „in„ Success ”) echo„ Command2 ”;; „Niepowodzenie”) echo „Command2 nie powiodło się”; Wyjście 1 ;; esac # Ten wiersz zostanie osiągnięty tylko wtedy, gdy wszystkie powyższe polecenia odbywają się „Wszystkie polecenia zakończone pomyślnie” W tym przykładzie instrukcja IF jest używana do sprawdzenia statusu wyjścia Command1, a instrukcja sprawy jest używana do sprawdzenia wyjścia Command2.
- Możesz także użyć
„&&”
operator do wykonania polecenia lub bloku poleceń tylko wtedy, gdy poprzednie polecenie się powiodnie. Na przykład: #!/bin/bash set -e # Niektóre polecenia, które mogą nie udać polecenia 1 && command2 && command3 # Ten wiersz zostanie osiągnięty tylko wtedy, gdy wszystkie powyższe polecenia uda się echo „Wszystkie polecenia zakończone pomyślnie”123456789 #!/bin/bash set -e # Niektóre polecenia, które mogą porażić się, a command2 && command3 # Ten wiersz zostanie osiągnięty tylko wtedy, gdy wszystkie powyższe polecenia uda się pomyślnie zakończone ” W tym przykładzie polecenie2 zostanie wykonane tylko wtedy, gdy polecenie.
Zakończyć
Możesz użyć polecenia pułapki, aby złapać inne sygnały, takie jak Int (przerwanie) lub TERMIN (zakończyć). Aby uzyskać więcej informacji, możesz skonsultować się na stronie Bash Man lub wyszukać w Internecie samouczki i przykłady.
mam nadzieję, że to pomoże! Daj mi znać, jeśli masz jakieś pytania.