Skrypty Shell, Skrypty Shell'a


Skrypty Shell'a

4.1 Wprowadzenie

Często używane sekwencje poleceń można zapisać w pliku i poddać ten plik powłoce do interpretacji, zamiast wpisywać każdorazowo je z klawiatury. Pliki te nazywane są skryptami shella (shell scripts).

Kilka rad dotyczących pisania skryptów:

Dobrym zwyczajem jest umieszczanie swoich skryptów w katalogu ~/bin.

Pierwsza linia skryptu powinna wyglądać następująco: #!/bin/sh ułatwia to interpretację powłoce, pierwsze dwa znaki oznaczają skrypt, dalej podana jest pełna nazwa programu wraz ze ścieżką, który ma dany skrypt interpretować.

Wiele dobrych przykładów skryptów można znaleźć w katalogach: /bin, /usr/bin, /sbin, ... Ciekawe są również skrypty sekwencji bootujacej umieszczonej w katalogu /etc/rc.d/. Aby zorientować się, które pliki z zawartych w przeszukiwanych katalogach są skryptami shella należy wydąć polecenie: $ file * | grep Bourne Wypisane wówczas zostaną wszystkie pliki zinterpretowane przez polecenie file jako skrypty shella Bournea.

4.2 Podstawy

4.2.1 Uruchamianie skryptów

Skrypty można uruchamiać, wywołując:

$sh skrypt — skrypt wykonywany jest w Shellu potomnym, nie wymagane są prawa wykonania skryptu;

$ skrypt — skrypt wykonywany jest w shellu potomnym, wymagane są prawa wykonania skryptu;

$. skrypt — skrypt wykonywany jest w shellu bieżącym, nie wymagane są prawa wykonania skryptu, nie można w ten sposób uruchamiać programów binarnych, nie można podawać dodatkowych argumentów wywołania;

$ exec skrypt — program zamazuje istniejący proces shella, można w ten sposób wykonywać skomplikowane programy.

Określenie „wykonywanie w shellu potomnym” oznacza, ze przed uruchomieniem skryptu uruchomiony zostanie nowy proces shella, będący potomkiem shella, w którym skrypt został wywołany, w tym nowym shellu skrypt zostanie uruchomiony. Natychmiast po zakończeniu skryptu, zakończony zostanie shell potomny.

4.2.4Zmienne

Odczyt wprowadzanych wartości

Do odczytu wartości zmiennych ze standardowego wejścia służy polecenie read. Odczytuje ona linie ze standardowego wejścia, dzieli ja na słowa i przypisuje je do kolejnych zmiennych dostarczanych jako argumenty. W bash dodatkowo jeśli po słowie read nie jest określona żadna zmienna, to odczytana wartość zostanie przypisana zmiennej REPLY.

Użycie zmiennej REPLAY:

$ read

> moja zmienna

$ echo $REPLAY

moja zmienna

Dodatkowe możliwości konstrukcji zmiennych

Uzyskanie wartości zmiennej powiększonej o dodane dowolne znaki uzyskuje się za pomocą konstrukcji:

$ {zmienna}dodatki

Przekazywane parametrów do skryptu

Parametry pozycyjne służą do przekazywania argumentów z linii komend do skryptu (programu). Bezpośrednio można zaadresować 9 parametrów, od $1 do $9, którym przypisane są argumenty według schematu:

$ polecenie arg1 arg2 arg3 ...

| | | |

$0 $1 $2 $3 ...

Dodatkowo bash pozwala na bezpośrednie zaadresowanie większej ilości parametrów, parametry dwucyfrowe należy podawać w postaci:

$

${nr_parametru}

$polecenie arg1 arg2 arg3 ... arg10 arg11 ...

| | | | | |

$0 $1 $2 $3 ... ${10} ${11} ...

Polecenie shift i set

Polecenie shift pozwala przesuwać parametry pozycyjne w lewo, tzn. pierwszy jest tracony, drugi zostaje pierwszym, trzeci staje się drugim, czwarty trzecim itd. Nie można przesuwać parametrów w prawo. Do przypisania nowych wartości parametrom pozycyjnym służy polecenie set, która jest wykorzystywana również m.in. do odzyskiwania parametrów pozycyjnych, straconych po wykonaniu komendy shift.

Zmienne związane z linią poleceń

Wartość niżej podanych zmiennych jest ustalana przez shell, nie może być ustalana przez użytkownika:

$0 - nazwa wykonywanego polecenia.

$# - liczba argumentów polecenia. Po wykonaniu polecenia shift, zmniejszana jest wartość $#.

$* - wszystkie argumenty z linii polecenia w postaci jednego ciągu znaków.

$@ - wszystkie argumenty z linii polecenia w postaci osobnych ciągów znaków. Zmienna $@, jeśli nie występuje w cudzysłowie, jest identyczna jak zmienna $*.

$$ - numer aktualnie wykonywanego procesu (PID), czyli numer PID skryptu, zmienna ta często jest używana do tworzenia plików tymczasowych, np. tmp=/tmp/moj.$$;

$! - numer procesu (PID) ostatniej komendy wykonywanej w tle;

$? - status wyjścia ostatnio wykonywanej komendy;

Dobrze napisany skrypt weryfikuje liczbę parametrów z jaką jest wywoływany, oto kilka przykładów:

W przypadku zerowej wartości zmiennych należy pamiętać o ujmowaniu ich w cudzysłowy. Parametry i zmienne można usuwać poleceniem unset.

Eksportowanie zmiennych

Eksportowanie zmiennych wykonuje się używając polecenia export:

$ export zmienna

4.2.5 Status wyjścia

W skryptach shella przyjęte jest, że jeśli program kończy się sukcesem wówczas do procesu wywołującego zwracana jest wartość 0, w przeciwnym wypadku zwracana jest wartość różna od zera. Status wyjścia można odczytać korzystając z parametrów $? i $! (rozdział 4.2.4)

Polecenie exit

exit [ n ]

Wyjście ze skryptu ze statusem (np. exit 1). Jeżeli n nie jest podane, status wyjściowy będzie taki, jak ostatnio wykonanego polecenia.

Polecenia true i false

Oba polecenia generują status wyjścia, przy czym true generuje zawsze status wyjścia 0, a

false generuje zawsze status wyjścia 1.

4.2.6 Polecenie test

Służy do testowania wyrażeń numerycznych, plikowych i tekstowych, zwraca 0 (prawda) lub wartość różną od zera (fałsz).

test wyrażenie lub [wyrażenie ]

Należy pamiętać, aby wpisywać spacje po obu stronach wyrażenia, używać cudzysłowów jeśli używa się dodatkowych spacji w wyrażeniu. Możliwe jest grupowanie komend w nawiasach objętych cudzysłowami.

Operatory instrukcji test:

! not

-a and

-o or

Testowanie typów plików:

-s plik plik istnieje i jest niezerowy;

-f plik plik istnieje i jest zwykłym plikiem;

-d plik plik istnieje i jest katalogiem;

-r plik plik istnieje, a wywołujący użytkownik posiada prawo czytania;

-w plik plik istnieje, a wywołujący użytkownik posiada prawo zapisu;

-x plik plik istnieje, a wywołujący użytkownik posiada prawo wykonywania;

p1 -nt p2 plik p1 jest nowszy niz plik p2;

p1 -ot p2 plik p1 jest starszy niz plik p2.

4.3.3 Funkcje w skryptach

Powłoka pozwala definiować nie tylko zmienne, ale i funkcje, które mogą zawierać dowolny ciąg poleceń. Funkcje mogą być wywoływane z argumentami, z taką samą składnią jaka obowiązuje przy przekazywaniu parametrów do skryptu.

Nazwa_funkcji ()

{

polecenia

}

Przykład 4.3.27

Przykład funkcji wczytaj:

wczytaj ()

{

echo -n ${1:-'Podaj nazwę: '}

read nazwa

echo Wybrano ${nazwa:=$2}

}

4.3.4 Reagowanie na sygnały zewnętrzne -

polecenie trep

Poruszona teraz zostanie kwestia reakcji wykonywanego skryptu na działania zewnętrzne. W systemie UNIX użytkownik może wysłać procesowi sygnał np. sygnał przerwania. Można wymagać od skryptu, aby na taki sygnał reagował w określony sposób, np. wyświetlając komunikat. Do obsługi mechanizmu sygnałów w skryptach służy polecenie trap, o składni:

trap [polecenie ][ nr_sygnału ]

Oba parametry są opcjonalne. Jeśli zamiast polecenia podany zostanie pusty argument, np. '', sygnał będzie ignorowany. Natomiast użycie trap bez numeru sygnału spowoduje, ze wybrane polecenie zostanie wywołane po odebraniu dowolnego sygnału. Wadą sygnałów jest miedzy innymi to, ze proces otrzymujący sygnał nie wie, skąd go dostał. Wysłanie dowolnego sygnału do procesu można uzyskać za pomocą polecenia kill:

kill -nr PID gdzie nr oznacza numer wysyłanego sygnału, a PID identyfikuje proces do jakiego sygnał ma zostać wysłany. Poniżej przedstawiony został przykład ukazujący możliwość wykorzystania sygnałów w skryptach powłoki. Jakie może być praktyczne wykorzystanie tych mechanizmów na poziomie języka powłoki, skoro wiadomo, ze ten sam efekt można uzyskać w sposób doskonalszy za pomocą np. języka C. Otóż, może to być przydatne tam, gdzie potrzeba jest nietypowego i szybkiego zastosowania programów już istniejących w systemie, szczególnie w dziedzinie administracji, np. skrypt badający statystykę wykorzystania systemu, generujący raporty w określonych godzinach, oraz na sygnał administratora lub skrypt, który na sygnał przekaże zebrane wyniki.

4.4 Przydatne polecenia i programy

4.4.1 Operacje na liczbach całkowitych - expr

Polecenie expr traktuje zmienną tekstową jako wartość numeryczną i wykonuje na niej operacje. Argumentami polecenia expr mogą być tylko liczby całkowite.

expr argument1 operator argument2

Możliwe operatory (operacje):

+ dodawanie,

- odejmowanie,

* mnożenie,

/ dzielenie,

% modulo,

: porównanie argumentów.

Po obu stronach operatora należy umieścić spacje. Wynik nie będący liczba całkowitą jest obcinany do wartości całkowitej. Aby przypisać wartość wyrażenia zmiennej, komendę expr należy umieścić w akcentach.



Wyszukiwarka

Podobne podstrony:
06 pamięć proceduralna schematy, skrypty, ramyid 6150 ppt
geodezja satelitarna skrypt 2 ppt
Mój skrypt 2011
Mechanika Techniczna I Skrypt 2 4 Kinematyka
MNK skrypt
bo mój skrypt zajebiaszczy
praktyka skrypt mikrobiologia id 384986
Leki przeciwbakteryjne skrypt
Patrologia Ćwiczenia Skrypt
Mechanika Techniczna I Skrypt 4 2 4 Układ belkowy złożony
Biochemia skrypt AGH
Prawo publiczne gospodarcze, Skrypt 2015
jezyk C skrypt cz 1
iR Shell 3 9 User Guide
kontrola skrypt
eb1 zadania ze skryptu

więcej podobnych podstron