Strona:
27

Współpraca i reklama !
 

Linux - kurs Bash'a - część 3

Witam w kolejnym odcinku naszego kursu. W poprzednich częściach
poznaliśmy kilka najbardziej podstawowych poleceń linuxowego trybu
textowego. 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
golish@yoyo.pl