|   | 
 |   | 
  
 
  
Linux - kurs bash'a (cz. 3)
    Witam w kolejnym odcinku naszego kursu. W poprzednich częściach poznaliśmy kilka najbardziej podstawowych poleceń linuxowego trybu tekstowego. Dziś zajmiemy się ich łączeniem oraz najprostszymi skryptami. Do rzeczy!
        Strumienie i potoki
      Nie bójcie się, nie będzie tu żadnego wykładu z geografii. Wspomniane w nagłówku strumienie i potoki to tylko dwa różne sposoby łączenia poleceń. Strumienie to nic innego jak przekierowywanie danych wejścia i wyjścia. Używamy do tego celu specjalnych znaków: "<" (przekierowanie na wejście) i ">" (przekierowanie na wyjście). Dobrym przykładem na zastosowanie strumieni jest polecenie cat. Ma ono wiele różnych zastosowań, ale w tej chwili interesuje nas jedynie jedno z nich - odczytywanie i zapisywanie plików. Aby zapisać do pliku używamy komendy:
      cat > plik
  Wpisywanie kończymy kombinacją klawiszy Ctrl-C (w ten sposób można zakończyć prawie każdy program pracujący w trybie textowym). Uwaga! cat wywołane w ten sposób usuwa zawartość już istniejącego pliku. Aby dopisać coś na końcu już istniejącego pliku powinniśmy użyć znaku ">>" zamiast ">". Jeśli chcemy teraz odczytać, to co przed chwilą zapisaliśmy, powinniśmy użyć polecenia:
      cat < plik
  W ten sposób zobaczyliśmy zawartość naszego pliku. Ale co jeśli plik był dłuższy niż jeden ekran? Wtedy ujrzelibyśmy tylko jego końcówkę. I tu właśnie dochodzimy do potoków. Potoki to przekierowanie wyjścia jednego programu na wejście drugiego. Oznacza się je przez "|". W naszym przykładzie przekierujemy wyjście cat na wejście more (program more dzieli podany tekst na odcinki długości ekranu, dzięki czemu możemy go swobodnie przeczytać):
      cat < plik | more
  Przez potok bardzo często wywoływane jest polecenie grep, które w podanym tekście znajduje żądane słowo i wypisuje linijki je zawierające. Jednym z jego zastosowań może być na przykład:
      ls -a | grep txt
  W ten sposób uzyskaliśmy listę plików, które w swojej nazwie zawierają "txt".
        Skrypty
      W ten oto sposób dotarliśmy do pisania skryptów powłoki. Ogólnie mówiąc, skrypt to zestaw poleceń powłoki zapisanych do pliku. Jednak stosuje się w nich również różne konstrukcje znane z programowania w innych językach, np. instrukcje warunkowe lub pętle. Najprostszy skrypt wygląda w ten sposób:
      #!/bin/bash     echo "Hello world!";
  Aby tak napisany skrypt uruchomić, należy nadać mu odpowiednie uprawnienia. Efektem działania tego skryptu jest:
      Hello world!
  (trudno to było zgadnąć, nie? ;)). Przyjrzyjmy się teraz bliżej jego budowie. Pierwsza linijka to ścieżka do interpretera poprzedzona przez sekwencję "#!". Jest ona niezbędna do prawidłowego działania skryptu. Wszystkie inne wpisy poprzedzone przez "#" są ignorowane jako komentarze. Następna linijka zawiera polecenie echo. Wypisuje ono podany tekst na ekranie. Każde polecenie kończymy znakiem ";". Teraz napiszmy coś trochę bardziej skomplikowanego:
      #!/bin/bash     #program sprawdza, czy został wywołany z jakimis parametrami,     #jesli tak to je wypisuje     if [ $# -ne 0 ]; then       echo "Sa argumenty!";     else       echo "Argumentow brak!";     fi
  Program ten pokazuje zastosowanie instrukcji warunkowej if i zmiennych. Najpierw zmienne. Aby nadać jakiejś zmiennej, na przykład a, jakąś wartość, na przykład 3, piszemy:
      a=3
  Aby później tą wartość uzyskać, musimy nazwę zmiennej poprzedzić znakiem $, w naszym przykładzie $a. W naszym programie uzyskujemy w ten sposób wartość zmiennej specjalnej #, w której przechowywana jest ilość parametrów, z którymi program został wywołany. Kolejne parametry są zapisane w zmiennych 1, 2, 3 itd. Oprócz zmiennej (a raczej przede wszystkim) widzimy w naszym skrypcie instrukcję warunkową if. Ma ona następującą budowę:
      if wyrażenie_logiczne; then       polecenia     else       polecenia     fi
  Wyrażenie logiczne jest to zazwyczaj polecenie test z odpowiednimi parametrami. Można je jednak zastąpić przez wpisanie odpowiednich parametrów w nawias kwadratowy i to właśnie taki zapis stosuje się najczęściej. Polecenie test ma bardzo wiele różnych parametrów i ich wypisywanie w tym miejscu nie ma sensu. Polecam lekturę man test. Jeśli polecenie test zwróci prawdę (w naszym programie - gdy program zostanie wywołany z parametrami) wykonają się instrukcje bezpośrednio po then, w przeciwnym przypadku wykonają się instrukcje po else. Instrukcję warunkową kończymy przez fi (nie jest konieczne już stawianie ";").
          Praca domowa
      Żeby nie było tak prosto, że ja to pisze, a Wy czytacie, to macie pracę domową. Trzeba napisać skrypt, który sprawdzałby czy istnieje plik lub katalog o podanej nazwie, jeśli tak to wypisuje odpowiedni komunikat, jeśli nie (tzn. nie ma ani pliku ani katalogu) to tworzy katalog, a w nim plik o żądanej nazwie. Jak widzicie praca nie jest za trudna, więc chyba wszyscy sobie poradzą. W razie jakichkolwiek problemów proszę o kontakt na adres poniżej. Tymczasem do zobaczenia w następnym odcinku. 
 GOLISH 
e-mail: golish@yoyo.pl 
 
 
   
 |   |