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.