Na tekstowo

Nie ma niczego dziwnego w fakcie, że komuś może się podobać “klepanie” skryptów, a nie – na pozór wygodniejsze – klikanie w okienkach graficznych programów konfiguracyjnych. Skrypty systemowe jeszcze długo będą zaspokajały niemal wszelkie potrzeby “adminów” i co bardziej ambitnych użytkowników komputerów – oferują one bowiem większą elastyczność oraz lepsze możliwości śledzenia wyników ich działania. Wagę skryptów systemowych docenił nawet Microsoft, wprowadzając do swoich na wskroś okienkowych systemów mechanizm WSH (Windows Scripting Host), zastępujący mało wydajne programy wsadowe (pliki.BAT).

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

).

Więcej:bezcatnews