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:
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
Wypisanie komunikatu o sukcesie, gdy kopiowanie pliku się powiodło
$ cp plik1 plik2 && echo "Sukces!!"
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
Ś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