






 
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
 |
|
 |
|