Systemom uniksowym skrypty systemowe towarzyszą od momentu ich powstania. Linux jest w tym przypadku godnym spadkobiercą “dużych” Uniksów. Administrator systemu ma do dyspozycji przynajmniej kilkanaście języków skryptowych, pozwalających w sposób kompletny zarządzać OS-em – wystarczy wspomnieć chociażby Perla, Pythona czy Tcl. Skoncentruję się jednak na wbudowanych możliwościach najpopularniejszej tekstowej powłoki linuksowej, czyli shella o nazwie bash.
Zakładam przy tym, że Czytelnik zna elementarne zasady posługiwania się bashem lub innym shellem (na poziomie, na którym będziemy operować w naszych przykładach, różnice nie są wielkie). Jeśli tak nie jest, polecam jeden z licznych kursów podstaw obsługi shella, dostępny w Internecie. Wystarczy zajrzeć choćby pod adres http://linuxcommand.org/. Postaram się omówić kilka ciekawych zastosowań skryptów systemowych. Wszystkie programy można, oczywiście, znaleźć na dołączonym do magazynu krążku CD-ROM.
Sprawy organizacyjne
Skrypt systemowy to nic innego jak tekstowy plik zawierający w kolejnych wierszach następujące po sobie polecenia rozpoznawane przez powłokę – w naszym przypadku basha (czyli Bourne shell). Najwygodniej będzie umieścić wszystkie często używane skrypty w jednym katalogu (na przykład podfolderze bin naszego katalogu domowego) i ustawić zmienną PATH w ten sposób, aby zawierała ścieżkę do naszego katalogu ze skryptami. Najprościej osiągniemy to, dopisując do pliku .profile następujący wiersz:
iPATH = $PATH:$HOME/bin
Teraz możemy się już zabrać za pisanie skryptów. Potrzebny nam będzie do tego celu jedynie dowolny edytor tekstu (vim, emacs, pico/ nano, joe itp.). Pierwszy wiersz skryptu powinien zawsze mieć postać:
#!/bin/bash Dzięki temu poleceniu system zidentyfikuje interpreter poleceń zawartych w pliku – czyli program /bin/bash. Po zakończeniu tworzenia skryptu zapisujemy go na dysku (zwyczajowo skrypty shella mają rozszerzenie sh, ale nie ma to najmniejszego wpływu na działanie programu), wychodzimy z edytora i nadajemy plikowi z poleceniami atrybut wykonywalności. W tym celu wydajemy komendę:
chmod 700 nazwa_skryptu.sh Jeśli podczas tworzenia skryptów natrafimy na jakiekolwiek trudności, warto zajrzeć przede wszystkim do pliku pomocy basha (
man bash
) – jest to naprawdę nieocenione źródło wskazówek w dziedzinie posługiwania się powłoką systemową. Zanim przystąpimy do kodowania, powinniśmy też przynajmniej pobieżnie zapoznać się z obsługą jakiegoś linuksowego edytora tekstu.
Przedstaw się
Spróbujmy zatem napisać pierwszy, prosty skrypt. Załóżmy, że będzie on pobierał, a następnie wyświetlał łańcuchy tekstowe (czyli, mówiąc w skrócie, napisy). Program taki może mieć następującą postać:
#!/bin/bash
echo -e “Podaj swoje imię: \c”
read imie
echo -e “Podaj swoje nazwisko: ”
read nazwisko
echo “Witaj, ” $imie $nazwisko
Skrypt pobiera dwa łańcuchy tekstowe (dla polecenia read wprowadzanie łańcucha kończy się po naciśnięciu klawisza [Enter]) i wyświetla je na ekranie. Po zapisaniu programu w pliku (lub skopiowaniu z CHIP-CD zbioru
witaj.sh
) nadajemy mu atrybut wykonywalności i możemy przetestować działanie skryptu. Warto zwrócić uwagę na dwa fakty – zmienne wewnętrzne wykorzystywane przez skrypt (
imie, nazwisko
) są deklarowane przy pierwszym ich użyciu, a dostęp do ich zawartości uzyskujemy, dopisując znak $ przed nazwą zmiennej. W podobny sposób możemy zresztą skorzystać ze zmiennych systemowych – np. poleceniem echo $HOSTNAME wypiszemy na ekranie nazwę lokalnego hosta, przechowywaną w zmiennej HOSTNAME (wskazówka: spis zmiennych systemowych uzyskamy poleceniem
set
).
Roboty porządkowe
Jedną z częściej powierzanych skryptom czynności jest czyszczenie zawartości katalogów z plikami tymczasowymi. Mogą to być katalogi najróżniejsze – od /tmp po pamięć podręczną przeglądarki WWW. Należy jedynie zwracać uwagę na uprawnienia użytkownika uruchamiającego skrypt do zapisu w poszczególnych katalogach.
Spróbujmy zatem sporządzić skrypt, który po wywołaniu będzie usuwał najrozmaitsze “śmieci” z naszego katalogu domowego. Może on mieć postać:
#!/bin/bash
# usuwamy zawartość katalogu
# tmp użytkownika
rm -rf $HOME/tmp
# czyścimy cache galeona
rm -rf $HOME/.galeon/mozilla/
galeon/Cache
Skrypt można, oczywiście, dowolnie dopasować do swoich potrzeb i wywoływać np. przy każdym logowaniu do konsoli (w tym celu dodajemy jego wywołanie do pliku
~/.profile
).