Programowanie w Shellu (index)


Programowanie w Shellu (2) - filtry, potoki

ZADANIE 2.1

Zbadać zastosowanie znaków specjalnych Shella.


$ date ; ls                   (średnik separuje polecenia w wierszu)
$ echo  Kilka              napisow
$ echo "Kilka              napisow"     (ochrona spacji)
$ echo "Dziesiejsza data: `date`"       (cytowanie polecenia)
$ echo "Dziesiejsza data: $(date)"      (cytowanie polecenia)
$ echo "Katalog domowy: ${HOME}"        (podstawienie zmiennej)
$ echo 'Katalog domowy: ${HOME}'        (cytowanie napisu)
$ echo Gwiazdka *
$ echo Gwiazdka \*            (zasłanianie specjalnego znaczenia znaku)
$ echo "Gwiazdka *"
$ echo "Jeden " dwa " dolar $HOME"      (cytowanie znaków)
$ echo "Jeden \" dwa \" dolar \$HOME"   (cytowanie znaków)

ZADANIE 2.2

Zbadać sposoby tworzenia plików tekstowych.


$ touch p1.txt                          (stworzenie pustego pliku)

$ echo komunikat > p2.txt            (przekierowanie wyjścia)

$ ls > p3.txt

$ vi p4.txt                             (użycie edytora)

$ nano p4.txt

$ cat > p5.txt                       (wpisanie z klawiatury)
Pierwsza linia.[Enter]
Druga linia.[Enter]
[Ctrl]+[d]

$ cat << EOF! > p6.txt         (to można wykorzystać w skryptach)
> Pierwsza linia.[Enter]
> Druga linia.[Enter]
> EOF![Enter]

ZADANIE 2.3

Zbadać mechanizm przekierowania wejścia/wyjścia i tworzenia potoku na przykładzie wybranych poleceń systemu Linux.


$ ls >> dirs.txt        (dopisywanie do pliku)

$ cat < d1.txt > d2.txt           (działa jak:    cp d1.txt d2.txt)

$ ls | wc -l
    (ls może rozpoczynać potok; 
    otrzymujemy liczbę plików w katalogu bieżącym)

$ ls | cat -n                 (ponumerowanie linii)

$ ps xa | less                (less i more mogą kończyć potok)

$ ps ax | tee lista.txt | wc -l
    (tee rozgałęzia strumień do pliku lista.txt)

$ ps ax | tee -a lista.txt | wc -l      (tee dopisze do pliku)

$ tty
    (otrzymamy nazwę pliku specjalnego związanego z naszym 
    terminalem, czyli standardowym wyjściem)

$ ps ax | tee `tty` | wc -l
    (tee skieruje na ekran; wykorzystane polecenie tty)

INNE ZNAKI SPECJALNE


polecenie1 ; polecenie2 ; polecenie3
Średnik separuje polecenia w jednym wierszu.

polecenie &
Wykonaj polecenia w tle.

(polecenie1; polecenie2)
Grupuj standardowe wyjścia poleceń, wykonuj w podshellu.

{ polecenie1; polecenie2;}
Wykonaj polecenia w bieżącym shellu.
Ważna jest pierwsza spacja i ostatni średnik!

polecenie1 | polecenie2 
Potok

< >
Przeadresowanie wejścia/wyjścia.

${ZMIENNA}
Podstaw wartość zmiennej shella.

`polecenie`
Podstaw wynik polecenia ze standardowego wyjścia
(backquote, znak akcentu, inaczej odwrotny apostrof).

$(polecenie)
Podstaw wynik polecenia ze standardowego wyjścia (tylko dla bash).

\
Cytowanie znaku w celu zasłonięcia specjalnego znaczenia
(backslash, odwrotny ukosnik).

'cokolwiek'      
Cytuj wszystkie znaki w napisie (single quote, apostrof)

"Napis"
Cytuj wszystkie znaki w napisie, ale wykonaj pewne podstawienia
(zachowuje specjalne znaczenie trzech znakow: 
$ wskazuje nazwę zmiennej [umożliwia podstawienie wartości zmiennej],
`` znaki akcentu [umożliwia zacytowanie polecenia],
\ znak maskujący)

#
Znak komentarza dla shella (ignoruje znaki do końca linii).

polecenie1 && polecenie2
Sprawdzenie kodu powrotu i w przypadku prawdy wykonanie polecenia.

polecenie1 || polecenie2
polecenie1 || { polecenie2; polecenie3;}
Sprawdzenie kodu powrotu i w przypadku fauszu wykonanie polecenia.

STRUMIENIE

Każdemu procesowi w Linuksie są przypisane co najmniej trzy strumienie danych:

Każdy uruchomiony w systemie proces może otworzyć jednocześnie na swoje potrzeby do dwudziestu plików. Otwarty plik proces identyfikuje poprzez przyporządkowana mu liczbę całkowitą zwaną deskryptorem pliku. Trzy liczby (0, 1, 2) są zarezerwowane i odpowiadają trzem plikom, które są zawsze otwierane w momencie utworzenia procesu:

POTOKI (PIPE) I FILTRY

Potok to konstrukcja złożona z wielu poleceń, w której stdout pierwszego polecenia jest dołączony do stdin drugiego polecenia, z kolei stdout drugiego polecenia jest dołączony do stdin trzeciego polecenia itd.

Filtry to polecenia, które:

OPERATORY DO PRZEŁĄCZANIA STRUMIENI

prog > plik
prog >> plik
prog < plik_in
prog <<OGR              (wpisywanie do pliku z klawiatury)
prog 2> plik_err
prog 2>> plik_err
prog > plik 2> plik_err
prog > plik 2>&1      (stderr idzie tam gdzie stdout; ważna kolejność!)
prog &> plik           (jw)
prog 2> plik 1>&2      (stdout idzie tam gdzie stderr; ważna kolejność!)

Programowanie w Shellu (index)