TeamQuest Blog

Upiększamy wyrażenia warunkowe

Upiększamy wyrażenia warunkowe

Marcin Sarna , 04.03.2021 r.

Czy Bash może być ładniejszy?

Instrukcja if

Instrukcja if jest podstawowym narzędziem programisty, nie tylko w skryptach bashowych ale w całym programowaniu. Są bardzo często używane w skryptach powłoki, chociaż w wielu przypadkach można je zastąpić czymś znacznie bardziej eleganckim i czytelnym.

W tym wpisie pokażemy, jak zamiast tego można użyć operatorów sterujących. Wielu prawdopodobnie o tym słyszało, ale nie zdaje sobie sprawy, jak wydajnie z nich korzystać – a przez to ich nie stosuje. Tymczasem taka wiedza pomoże Ci w przyszłości pisać czytelniejsze skrypty.

Oto jak wyglądają proste instrukcje if w bashu:

if [ expression ]
then
command
fi
# or
if [ expression ]; then command; fi

No musi się z tym coś dać zrobić…

Operatory sterujące

Bash oferuje tzw. operatory sterujące (control operators) do tworzenia sekwencji poleceń. Niektóre z nich są warunkowe i pozwalają na logiczne rozgałęzianie na podstawie tego co zwróciła nam ostatnio wydana komenda.

Skoncentrujemy się tylko na tych dwóch operatorach logicznych:

  • &&: operator AND - uruchom następujące polecenie tylko wtedy, gdy poprzednie się powiodło
  • ||: operator OR - uruchom następujące polecenie tylko wtedy, gdy poprzednie nie powiodło się

Kody wyjścia programu

Możesz się teraz zastanawiać, skąd bash wie czy polecenie się powiodło. Tutaj na scenę wchodzą właśnie kody wyjścia programu. Gdy program kończ swoje działanie, zwracany jest numeryczny kod statusu. Wartość 0 oznacza, że program się powiódł, każda inna wartość oznacza niepowodzenie.

Kod wyjścia jest zwykle ukryty przed użytkownikiem. Stan ostatniego polecenia uruchomienia jest przechowywany w zmiennej ?. Możesz to sprawdzić, wywołując proste polecenie echo $?. Na przykład listowanie z ls zwykle zwraca 0, ale ta wartość będzie inna jeśli katalog nie istnieje lub wystąpił błąd.

 ls ~/ # exit code: 0
ls ~/nieistniejący_katalog # exit code: 2

Będzie to działać podobnie w przypadku właściwie każdego programu.

Łączymy to w łańcuchy poleceń

Przyjrzyjmy się kilku przykładom, aby pokazać, jak można użyć tych operatorów sterujących.

Wyobraź sobie, że chcesz pobrać plik ~/.profile, ale tylko wtedy, gdy można go odczytać:

 if [ -r ~/.profile ]; then
source ~/.profile
fi

Możemy to uprościć za pomocą operatorów sterujących: [ -r ~/.profile ] && . ~/.profile.

Tylko jeśli wyrażenie sprawdzające możliwość odczytania plików powiedzie się (potwierdzi możliwość odczytania plików) będziemy chcieli pobrać plik. Więc używamy operatora &&.

Sprawdź oferty pracy na TeamQuest

Aby wymagać wywołania użytkownika jako root, możemy wykonać następujące czynności: [ $EUID -ne 0 ] && echo You must be root && exit 1. Polecenie echo zwraca wartość 0, więc zaraz po nim wykona się exit.

Jeśli chcielibyśmy wydrukować zawartość naszego pliku profilu z komunikatem o powodzeniu lub komunikatem o błędzie przy błędzie odczytu, możemy wykonać następujące czynności: cat ~/.profile && echo This is your profile || echo Failed to read profile.

Możesz tworzyć te sekwencje poleceń na przykład do tworzenia skryptów instalacyjnych, które przechodzą przez szereg kroków. Możesz zdefiniować funkcje basha dla każdego kroku i zaaranżować instalację w następujący sposób: init && configure && install && cleanup || echo Install failed.

To teraz czas przypomnieć sobie jak wygląda szukanie plików z linii poleceń.

Najnowsze oferty pracy:

Polecane wpisy na blogu IT:

Szukasz pracownika IT?

Dostarczymy Ci najlepszych specjalistów z branży IT. Wyślij zapytanie

Wyrażam zgodę TeamQuest Sp. z o.o. na przetwarzanie moich danych osobowych w celu marketingu produktów i usług własnych TeamQuest, w tym na kontaktowanie się ze mną w formie połączenia telefonicznego lub środkami elektronicznymi.
Administratorem podanych przez Ciebie danych osobowych jest TeamQuest Sp. z o.o., z siedzibą w Warszawie (00-814), ul. Miedziana 3a/21, zwana dalej „Administratorem".
Jeśli masz jakiekolwiek pytania odnośnie przetwarzania przez nas Twoich danych, skontaktuj się z naszym Inspektorem Ochrony Danych (IOD). Do Twojej dyspozycji jest pod adresem e-mail: office@teamquest.pl.
W jakim celu i na jakiej podstawie będziemy wykorzystywać Twoje dane? Dowiedz się więcej