W rozdziałach 9. i 10. przedstawiliśmy informacje dotyczące pracy z linuksowym wierszem poleceń. Polega ona na wydawaniu pojedynczych poleceń wykonywanych natychmiast po naciśnięciu klawisza Enter.
W tym rozdziale pójdziemy nieco dalej: pokażemy, w jaki sposób zlecać systemowi wykonanie pewnych czynności w przyszłości oraz jak tworzyć pliki wsadowe mogące zawierać większą liczbę poleceń. Takie pliki nazywane są często skryptami powłoki, ponieważ ich składnia i język w nich używany są wbudowane właśnie w powłokę. Podobnie sprawa wygląda w przypadku plików wsadowych systemu MS-DOS - z tym, że skrypty powłoki mogą mieć o wiele większe możliwości i łatwiej jest je tworzyć. Skrypty pozwalają na korzystanie ze swego rodzaju języka makropoleceń, działających w systemie operacyjnym.
Przedstawimy podstawowe wiadomości dotyczące zlecania systemowi wykonania pewnych poleceń w przyszłości. Następnie pokażemy, w jaki sposób tworzyć i uruchamiać nieskomplikowane skrypty powłoki.
Jeśli skrypty powłoki mają według Ciebie zbyt małe możliwości, możesz wykorzystać jeden z wielu języków programowania dostarczanych wraz z systemem Red Hat Linux. Omówię pokrótce możliwości języków
Awk, Perl, Python i Tcl.
Dla wielu użytkowników Linuksa bardzo ważny jest fakt, że rozprowadza się go wraz z kodem źródłowym. Pokażę Wam świetny sposób na wykorzystanie wolnego czasu: przeglądanie kodu źródłowego jądra systemu Linux!
Korzystając z polecenia at, możesz zlecić systemowi wykonanie jakiegoś polecenia o określonej godzinie. Jeśli chcesz, aby polecenie wykonywane było cyklicznie, możesz dodać je do pliku cron danego użytkownika. Aby przesłać wiadomość pocztą elektroniczną za pomocą polecenia at
|
|
|
Wyrażenia określające czas w poleceniu at
Czas można określić na wiele sposobów. Domyślnie przyjmowany jesz czas 24-godzinny. Podawanie minut jest opcjonalne. Jeśli dodany zostanie przyrostek am lub pm, czas będzie traktowany jako czas 12-godzinny. Jeśli użyte zostanie słowo kluczowe zulu, będzie traktowany jako czas Greenwich (GMT), a nie zgodnie z obowiązującą strefą czasową. Zamiast numerycznych określeń można również stosować kilka słów mających specjalne znaczenie: midnight (północ), noon (południe), teatime (czas na herbatę) oraz now (teraz).
Słowo teatime oznacza godzinę 16.00, natomiast po słowie now trzeba podać czas, po jakim polecenie ma zostać wykonane.
Oprócz wartości oznaczających godziny można również podawać, w którym miesiącu zadanie ma się rozpocząć (za pomocą liczb od 1 do 12 lub pierwszych trzech liter angielskiej nazwy miesiąca). Rok oznaczany jest liczbą czterocyfrową. Dni tygodnia podaje się za pomocą pierwszych trzech liter nazwy angielskiej. Można również używać słów today (dziś) oraz tomorrow (jutro).
Odstępy czasu pozwalają na podanie pory rozpoczęcia zadania w odniesieniu do czasu bieżącego. Do ich określania służy znak +, po którym następuje liczba i jeden z wyrazów: minute, hour, day, week lub year (można również używać liczby mnogiej, na przykład weeks). Słowo next (następny) ma takie samo znaczenie, jak +1.
Oto kilka przykładów poprawnych określeń czasu (pierwsze dwa oznaczają to samo):
at 1412 January 9
at 2:12pm Jan 9
at 1 am Sat
at now + 5 minutes
at teatime next day
Rysunek 11.1. Polecenia wprowadzane po znaku zachęty at> zostaną wykonane o zadanej godzinie.
Rysunek 11.2. Za pomocą polecenia at można wysłać wiadomość pocztą elektroniczną czy wykonać szereg poleceń.
Rysunek 11.3. Aby wyświetlić polecenia oczekujące na wykonanie, wpisz atq. |
|
Wskazówki
Aby anulować zlecenie programu at
|
Pliki cron służą do tego, aby użytkownicy mieli możliwość automatycznego uruchamiania poleceń w określonych odstępach czasu. Dla przykładu, można codziennie wysyłać administratorowi wiadomość przypominającą o konieczności wykonania kopii zapasowej systemu, można również co tydzień uruchamiać program sporządzający tygodniowe sprawozdania. Warto zgrupować wszystkie potrzebne polecenia w pojedynczym skrypcie powłoki, zamiast wprowadzać je z osobna do pliku cron. Administrator systemu, czyli root, może wykorzystać polecenie crontab, aby uzyskać dostęp do plików cron wszystkich użytkowników, co za chwilę wyjaśnię. Włącznie z poleceniem crontab administrator może zmieniać ustawienia programu cron na trzy sposoby:
W kolejnych akapitach opiszemy wszystkie te sposoby. Należy jednak pamiętać, że ze względów bezpieczeństwa edycja plików cron poszczególnych użytkowników może być zabroniona. Jeśli chcesz zmodyfikować plik cron, a nie jesteś administratorem systemu, powinieneś skontaktować się z administratorem. Aby zlecić programowi cron wykonanie polecenia za pomocą panelu sterowania systemu Linux
|
|
Rysunek 11.4. Zadania mogą zostać usunięte z kolejki za pomocą polecenia atrm.
Rysunek 11.5. Za pomocą panelu sterowania systemu Linux można zdefiniować zadania wykonywane okresowo dla użytkownika root. |
Rysunek 11.6. Zakładka Schedule Jobs Definition pozwala dodawać zadania do pliku gron bez konieczności jego bezpośredniej edycji.
Rysunek 11.7. Pliki cron, zapisane w katalogu /var/spool/cron, można również edytować bezpośrednio. Czas według programu cron
Liczby znajdujące się przed każdym z poleceń w pliku cron określają porę jego wykonania. Podawane są w pięciu kolumnach rozdzielonych przecinkami; myślnik oznacza zakres, natomiast gwiazdka - wszystkie dostępne wartości (jeśli na przykład w polu określającym dzień miesiąca znajdzie się gwiazdka, polecenie będzie wykonywane codziennie). Oto lista poszczególnych pól i dostępnych w nich wartości: |
|
Wskazówka
Aby bezpośrednio edytować plik cron
Pliki cron poszczególnych użytkowników są zlokalizowane w katalogu /var/spool/cron. Można otworzyć taki plik oraz dodać, zmodyfikować czy usunąć odpowiednie zadania za pomocą ulubionego edytora tekstów (rysunek 11.7) - przedstawiony tu plik cron został utworzony za pomocą programu Linuxconf). Możesz również tworzyć pliki cron dla poszczególnych użytkowników |
Wskazówki
|
|
Rysunek 11.8. Polecenie crontab -e otwiera plik cron użytkownika w domyślnym edytorze tekstów.
Rysunek 11.9.Mam już dość ciastek! |
Rysunek 11.10. Skrypty powłoki można tworzyć za pomocą dowolnego edytora tekstów (na rysunku edytor Gnotepad+).
Rysunek 11.11. Skrypt można uruchomić, podając jego nazwę jako argument polecenia uruchamiającego powłokę. |
|
Podstawowe informacje o tworzeniu skryptów powłoki
Tworzenie skryptu powłoki sprowadza się do utworzenia pliku tekstowego zawierającego odpowiednie polecenia i zapisania go. Aby utworzyć skrypt powłoki
Aby uruchomić skrypt
W wierszu poleceń wpisz nazwę powłoki,
Tekst zostanie wyświetlony na ekranie, a terminal wyda krótki dźwięk |
Wskazówki
|
|
|
Rysunek 11.12. W skryptach powłoki można korzystać z wartości parametrów pozycyjnych. |
|
Składnia skryptów powłoki Zmienne używane w skryptach powłoki nie mają typów, co oznacza, że nie trzeba określać, czy zmienna zawierać będzie tekst czy wartości liczbowe (lub cokolwiek innego).
Zmienne deklaruje się równocześnie z przypisywaniem im wartości za pomocą znaku równości, na przykład Jeśli w tekście nie znajdują się spacje, nie trzeba otaczać go cudzysłowem.
Symbol $ używany jest do przypisywania wartości jednej zmiennej jakiejś innej zmiennej, na przykład Korzystanie z argumentów podawanych w wierszu poleceń Argumenty, z których chcesz korzystać w skrypcie, można przekazać do niego za pomocą wiersza poleceń. Pierwszy z argumentów w skrypcie dostępny jest pod nazwą $1, drugi - $2 i tak dalej. Poniżej przedstawiamy skrypt ilustrujący to zagadnienie:
#Wyswietlanie argumentow z wiersza polecen
Jeśli zapiszesz taki skrypt i uruchomisz go bez argumentów, wyświetli on tekst „Please provide a command line name!”. W przeciwnym przypadku wyświetlony zostanie identyfikator podany jako argument |
W skrypcie występuje również zmienna Aby pozwolić na wprowadzenie danych przez użytkownika
Wskazówki
|
|
Rysunek 11.13. Aby pozwolić użytkownikowi na wprowadzanie danych do skryptu, skorzystaj z polecenia read.
|
|
|
Instrukcje iteracyjne i warunkowe Instrukcje iteracyjne i warunkowe to między innymi:
Dokładniejsze informacje o składni tych poleceń znajdziesz w dokumentacji powłoki bash (patrz punkt „Aby uzyskać dokumentację dotyczącą polecenia”). Poniżej przedstawiamy skrypt, który wykorzystuje dane wprowadzane przez użytkownika oraz nieskończoną pętlę, aby obliczyć sumę dowolnej ilości liczb. |
#! /bin/bash
# Program interaktywny
sum=0
while :
do
echo -n "Add another number (y/n): "
read dalej
if [ $dalej = n ] ; then
break
fi
if [ $dalej != y ] ; then
echo '"y" or "n" please!';
continue
fi
echo -n "Enter a number to add to the sum: "
read nowy
sum=$(($sum + $nowy))
echo "Sum so far is $sum"
done
echo -e "Your sum is $sum"
echo "Bye"
Wskazówki
Aby uzyskać dokumentację dotyczącą polecenia
|
|
Rysunek 11.14. Programy powłoki można tworzyć za pomocą pętli zawierających instrukcje wymagające interakcji z użytkownikiem.
Rysunek 11.15. Gnome Help Index, czyli skorowidz pomocy systemu Gnome jest punktem wyjścia przy szukaniu dokumentacji o składni poleceń.
Rysunek 11.16. Spis stron systemu pomocy Info łączy dokumentację systemową i środowiska Gnome. |
Rysunek 11.17. Dokumentacja dotycząca powłoki bash jest dostępna po wybraniu odnośnika bash.
Rysunek 11.18. Odnośniki w dokumentacji powłoki bash pozwalają na przejście do dokładniejszych informacji o programowaniu w języku powłoki.
Rysunek 11.19. Lista słów zastrzeżonych powłoki pozwala łatwo dotrzeć do informacji o składni poszczególnych instrukcji. |
|
Rysunek 11.20. Instrukcje opisane są szczegółowo, wraz ze związanymi z nimi konstrukcjami. |
Język GNU awk - lub gawk - jest wersją języka służącego do przetwarzania tekstów. Jego autorami byli Alfred V. Aho, Peter J. Weinberger oraz Brian W. Kernighan (nazwa awk pochodzi od pierwszych liter ich nazwisk). Awk najlepiej nadaje się do przetwarzania plików tekstowych, ponieważ „myśli” on w kategoriach pól i rekordów, którymi zwykle są wyrazy i wiersze takich plików. Z tego powodu niezbyt dobrze nadaje się on do przetwarzania plików binarnych. Typowym zastosowaniem tego języka jest tworzenie sformatowanych raportów na podstawie dostarczonych danych. Mnóstwo informacji na temat programowania w tym języku znajdziesz w katalogu /usr/doc/gawk-3.0.6. Gawk może być używany bezpośrednio z wiersza poleceń; w takim przypadku polecenia języka gawk należy otoczyć pojedynczym cudzysłowem, aby powłoka nie próbowała ich interpretować. Programy w języku Gawk dłuższe niż jedno czy dwa polecenia należy zapisywać w plikach.
W języku Gawk zmienna NF jest zmienną predefiniowaną zawierającą liczbę pól każdego z rekordów (czyli wyrazów w wierszu). Zmienna $0 zawiera cały rekord (wiersz), |
|
Aby wypisać liczbę wyrazów znajdujących się w każdym wierszu pliku tekstowego
Wskazówka
Rysunek 11.21. Język Gawk najlepiej nadaje się do przetwarzania plików tekstowych o określonej strukturze.
Rysunek 11.22. Gawk może zostać uruchomiony z wiersza poleceń lub po zapisaniu odpowiednich poleceń do pliku; w tym przypadku wyświetla on liczbę wyrazów wchodzących w skład każdego wiersza pliku. |
|
|
Język Perl Perl jest językiem wysokiego poziomu opartym na języku C, językach skryptowych takich jak awk, oraz językach skryptowych powłoki. Choć dostępne są kompilatory programów w nim napisanych, programy zwykle kompilowane są tuż przed ich uruchomieniem. Perl jest bardzo przenośny - program w tym języku może być bez większych zmian uruchomiony w prawie każdym systemie operacyjnym. Perl znakomicie radzi sobie z obsługą procesów, plików i tekstu. Jest wykorzystywany do obsługi danych wprowadzanych przez użytkowników na stronach WWW za pomocą mechanizmów CGI. Warto go poznać choćby ze względu na popularność na stronach WWW. Poza tym Perl jest często używany do automatyzacji zadań administracyjnych, ponieważ posiada on dostęp do powłoki. Zmienne w języku Perl nie posiadają typów, ale w języku tym występuje kilka ich rodzajów:
Więcej informacji na temat języka Perl znajdziesz w książce Perl and CGI: Visual QuickStart Guide, wydanej przez Peachpit Press. Zajrzyj też na stronę http://www.perl.com poświęconą w całości temu językowi. |
Wskazówka
|
|
Rysunek 11.23. Jeśli pierwszy wiersz skryptu ma postać #!/usr/bin/perl, jego pozostała część będzie przetwarzana przez program Perl.
Rysunek 11.24. W języku Perl dostępnych jest wiele zmiennych wewnętrznych, na przykład zmienna $< zawiera numer identyfikacyjny użytkownika. |
Python i Tcl
Wraz z systemem Red Hat Linux rozprowadzanych jest jeszcze wiele innych języków programowania i bibliotek.
Dwa bardziej interesujące to Python i Tcl.
Python to język obiektowy, w którym można pracować interaktywnie lub interpretując kod zapisany w modułach. Rozprowadzany jest na licencji public domain. Jego autor to Guido van Rossum, a nazwa pochodzi od latającego cyrku Monty Pythona. Python obsługuje moduły, klasy, wyjątki i dynamiczne typy danych. Programy w tym języku mogą korzystać z interfejsu graficznego, na przykład ze środowiska Gnome. Dokumentację znajdziesz w katalogu /usr/doc/python-docs-1.5.2.
Tcl, którego nazwa jest skrótem od angielskich słów tool control language, jest prostym językiem skryptowym, przeznaczonym głównie do osadzania w innych językach. Inaczej mówiąc, Tcl, napisany pierwotnie przez Johna Osterhouta, ma za zadanie spajać języki programowania i biblioteki o większych możliwościach. Tk to zestaw dodatków, które pozwalają na korzystanie z języka Tcl w środowisku graficznym. Pełną dokumentację znajdziesz na stronie http://www.scriptics.com.
Rysunek 11.25. Można przejrzeć zawartość pliku makefile używanego do kompilacji jądra systemu.
Rysunek 11.26. Kod źródłowy modułów jądra zawiera wiele komentarzy i dobrze się go czyta. |
|
Poznawanie kodu źródłowego systemu Linux Jeśli chcesz dowiedzieć się, w jaki sposób działa system Linux - nic nie stoi na przeszkodzie! Kod źródłowy systemu Linux znajduje się w podkatalogach katalogu /usr/src/linux. Kod źródłowy jądra systemu znajduje się w katalogu /usr/src/linux/kernel. Plik makefile jest używany do ustalania opcji kompilacji oraz do poinformowania kompilatora, które moduły i biblioteki należy połączyć. Aby obejrzeć plik makefile służący do kompilacji jądra Za pomocą edytora tekstów otwórz plik o nazwie makefile znajdujący się w katalogu /usr/src/linux/kernel (rysunek 11.25). Wskazówka
Głównym plikiem kodu źródłowego jądra jest plik sched.c. Jeśli otworzysz go za pomocą edytora tekstów, zobaczysz, że zaczyna się on od informacji o prawach autorskich Linusa Torvaldsa oraz o innych współautorach tego pliku (rysunek 11.26). Jeśli przejrzysz kod zapisany w tym pliku, zorientujesz się, że dotyczy on zarządzania procesami. Kod zawiera wiele komentarzy, co bardzo ułatwia jego czytanie. |
W tym rozdziale nauczyłeś się:
|
|
|
|
|
|
Rozdział 11.
252
251
Skrypty powłoki i programowanie
11
Skrypty powłoki i programowanie
Tabela 11.1. Zmienne wewnętrzne powłoki
Nazwa zmiennej |
Znaczenie |
$# |
Liczba argumentów przekazanych w wierszu poleceń |
$0 |
Nazwa programu powłoki |
$* |
Pojedynczy tekst utworzony ze wszystkich argumentów przekazanych w wierszu poleceń |
Tabela 11.2. Operatory porównania.
Operator |
Znaczenie |
= |
równe (łańcuchy znaków) |
!= |
nierówne (łańcuchy znaków) |
-eq |
równe (liczby) |
-ge |
większe lub równe (liczby) |
-le |
mniejsze lub równe (liczby) |
-ne |
różne (liczby) |
-gt |
większe niż (liczby) |
-lt |
mniejsze niż (liczby) |
Skrypty powłoki i programowanie
Planowanie zadań
Planowanie zadań
Planowanie zadań
Planowanie zadań
Planowanie zadań
Podstawy tworzenia skryptów powłoki
Podstawy tworzenia skryptów powłoki
Składnia skryptów powłoki
Składnia skryptów powłoki
Składnia skryptów powłoki
Składnia skryptów powłoki
Składnia skryptów powłoki
Język Awk
Język Perl
Język Perl
Kod źródłowy systemu Linux
Podsumowanie