Jak spradzić czy poprzednie polecenie zakończyło się błędem w bash – Linux/Unix ?
Pisząc skrypty powłoki czasami istnieje konieczność sprawdzenia czy poprzednio zdefiniowana instrukcja/polecenie zakończyło się sukcesem czy też nie i od tego uzależnić dalsze zachowanie skryptu.
Wykorzystamy do tego instrukcję warunkową if
wraz z warunkiem: $? -ne 0
. Spójrzmy na poniższy przykład:
touch plik.txt mv plik.txt plik.sh chmod 755 plik.sh if [ $? -ne 0 ] then echo "Blad! Polecenie chmod zakończyło się błędem." exit fi echo "Polecenie chmod 755 plik.sh wykonało się poprawnie." echo date +%Y-%m-%d > plik.sh plik.sh
W pierwszym kroku tworzymy plik.txt
, a następnie zmieniamy mu nazwę na plik.sh
. Poprzez chmod 755
modyfikujemy uprawnienia do pliku oraz sprawdzamy czy operacja ta zakończyła się sukcesem. Jeżeli udało się zmienić uprawnienia otrzymamy komunikat: Polecenie chmod 755 plik.sh wykonało się poprawnie.
oraz wykonają się kolejne kroku programu, czyli zapisanie skryptu wyświetlającego datę do plik.sh
oraz jego uruchomienie. W rezultacie na ekranie poza wspomnianym wcześniej komunikatem otrzymamy jeszcze bieżącą datę w formacie: YYYY-MM-DD
.
Co w przypadku kiedy polecenie chmod 755 plik.sh
zakończy się błędem? Spójrzmy na poniższy przykład:
touch plik.txt chmod 755 plik.sh if [ $? -ne 0 ]; then echo "Blad! Polecenie chmod zakończyło się błędem." exit fi echo "Polecenie chmod 755 plik.sh wykonało się poprawnie." echo date +%Y-%m-%d > plik.sh plik.sh
W powyższym kodzie utworzyliśmy plik.txt
, ale próbujemy zmienić uprawnienia do plik.sh
w związku z czym skrypt zakończy się błędem, wyświetli komunikat: "Blad! Polecenie chmod zakończyło się błędem."
oraz przerywa działanie – użycie słówka: exit
.