Komendy złożone

Operatory powłoki: && || ; pozwalają na wywołanie sekwencji komend jedna po zakończeniu drugiej. Każda wywoływana komenda może być dowolnie złożona, to znaczy zawierać wszystkie poznane wcześniej elementy takie, jak przekierowania wyjścia, czy podstawienia wartości.

$ komenda1 ; komenda2

Wykonuje komendę 1, a bezpośrednio po jej zakończeniu bezwarunkowo wykonuje komendę 2.

$ komenda1 && komenda2

Podobnie jak wyżej, ale wykonuje komendę2, tylko gdy komenda 1 zakończyła się sukcesem.

$ komenda1 || komenda2

Podobnie jak wyżej, ale wykonuje komendę2, tylko gdy komenda 1 zakończyła się błędem.

Aby stwierdzić czy wykonanie programu zakończyło się błędem, czy nie shell sprawdza kod wyjścia programu. Kod wyjścia jest liczbą całkowitą. Kod statusu 0 oznacza sukces, dowolny inny – błąd. Informacje o kodzie wyjścia danego programu zazwyczaj można znaleźć w podręczniku (man) w podsekcji EXIT STATUS. Komunikaty programu na stderr mają charakter informacyjny dla użytkownika i nie mają wpływu na interpretację statusu wyjścia przez shell.

Informacja dodatkowa: w przypadku programów pisanych w języku C kodem wyjścia jest wartość zwracana przez funkcję main.

Przykłady użycia:

  1. Utworzyć katalog i wejść do niego:

    $ mkdir testdir ; cd testdir

    Wersja zmodyfikowana – próba wejścia tylko, gdy tworzenie się powiodło

    $ mkdir testdir && cd testdir
  2. Wypisanie komunikatu o sukcesie, gdy kopiowanie pliku się powiodło

    $ cp plik1 plik2 && echo "Sukces!!"
  3. Wyszukanie linii w pliku zawierającej dane słowo lub komunikatu, że takiej linii nie ma. (Przy okazji przypomnienie – podwójny wykrzyknik ma znaczenie specjalne, trzeba użyć pojedynczych cudzysłowów lub backslasha).

    $ grep root /etc/passwd || echo 'Nie ma takiego słowa!!' # znaleziono
    $ grep xyzzy /etc/passwd || echo 'Nie ma takiego słowa!!' # nie znaleziono
  4. Ściągnięcie pliku z internetu i wyświetlenie, jeśli się powiodło:

    $ wget 'http://www.mini.pw.edu.pl/~karwowskij/index.html' && less index.html