Dodano: niedziela, 19 luty 2012r.
Fragment (pierwsza część) rozdziału nr 4 Tworzenie skryptów powłoki z książki: Linux. Komendy i polecenia. Wydanie III.
Pisanie skryptów powłoki to programowanie odpowiednich instrukcji — programów, które usprawniają wykonywanie wielu czynności. Skrypty powłoki obsługują zmienne, instrukcje warunkowe, pętle i wiele innych przydatnych elementów.
Skrypty powłoki to po prostu zgrupowane polecenia zapisane w jednym pliku. Podobnie jak przy wpisywaniu poleceń w okienku terminala, powinieneś pamiętać o tym, jak będą one wpisywane do pliku. Pamiętaj o tym, że każda nowa linia to nowe polecenie, więc nie można zapisywać polecenia w dwóch liniach.
Na przykład, aby wyświetlić listę zawartości swojego katalogu głównego, całe polecenie trzeba zapisać w jednej linii, ponieważ zapisanie go w dwóch lub więcej spowoduje błąd.
#!/bin/bash
vdir
/home/lukasz
[lukasz@localhost ~]$ ./skrypt
razem 44
drwx------ 5 lukasz lukasz 4096 gru 29 19:50 Desktop
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Dokumenty
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Muzyka
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Obrazy
-rw-r--r-- 1 lukasz lukasz 0 maj 24 13:04 pik.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik2.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik.txt
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Pobieranie
-rwxrwxrwx 1 lukasz lukasz 32 cze 10 13:41 skrypt
-rwxrwxrwx 1 lukasz lukasz 31 cze 10 13:41 skrypt~
drwx------ 6 lukasz lukasz 4096 maj 24 13:07 tmp
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Wideo
./skrypt: line 3: /home/lukasz: is a directory
Poprawnie zapisany skrypt będzie wyglądał następująco:
#!/bin/bash
vdir /home/lukasz
Wykonanie skryptu da pożądany efekt — listę zawartości katalogu głównego.
[lukasz@localhost ~]$ ./skrypt
razem 44
drwx------ 5 lukasz lukasz 4096 gru 29 19:50 Desktop
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Dokumenty
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Muzyka
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Obrazy
-rw-r--r-- 1 lukasz lukasz 0 maj 24 13:04 pik.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik2.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik.txt
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Pobieranie
-rwxrwxrwx 1 lukasz lukasz 31 cze 10 13:41 skrypt
-rwxrwxrwx 1 lukasz lukasz 29 cze 10 13:40 skrypt~
drwx------ 6 lukasz lukasz 4096 maj 24 13:07 tmp
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Wideo
Skrypty powłoki muszą zostać poprzedzone odpowiednią instrukcją odwołującą się do interpretera powłoki, której używamy.
#!/bin/bash
Dodatkowo plik taki musi mieć prawa do wykonywania, które należy nadać mu poleceniem chmod
(opisywanym we wcześniejszej części książki).
[lukasz@localhost ~]$ chmod 777 skrypt
W celu uruchomienia skryptu należy odpowiednio go wywołać. Zapiszmy skrypt w pliku skrypt
. Wówczas mamy go w katalogu głównym użytkownika i aby go wywołać, nie wystarczy wpisać jego nazwy, gdyż powłoka będzie wyszukiwała polecenia o takiej nazwie w ścieżkach wyszukiwania. Przed skryptem należy wpisać pełną ścieżkę dostępu do niego, zaczynając od znaku /, a gdy jesteśmy w katalogu, w którym jest umieszczony skrypt, wystarczy wpisać ./ (aktualny katalog, w którym znajduje się skrypt). W takim wypadku będziemy mieli pewność, że skrypt się uruchomi.
[lukasz@localhost ~]$ ./skrypt
Drugim sposobem uruchamiania skryptu jest użycie powłoki i przekazanie do niej skryptu w formie argumentu.
[lukasz@localhost ~]$ bash skrypt
razem 44
drwx------ 5 lukasz lukasz 4096 gru 29 19:50 Desktop
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Dokumenty
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Muzyka
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Obrazy
-rw-r--r-- 1 lukasz lukasz 0 maj 24 13:04 pik.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik2.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik.txt
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Pobieranie
-rwxrwxrwx 1 lukasz lukasz 31 cze 10 13:42 skrypt
-rwxrwxrwx 1 lukasz lukasz 32 cze 10 13:41 skrypt~
drwx------ 6 lukasz lukasz 4096 maj 24 13:07 tmp
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Wideo
Trzecim sposobem uruchomienia skryptu w aktualnej powłoce jest użycie znaku specjalnego. Dokonujemy tego za pomocą znaku .
.
[lukasz@localhost ~]$ . skrypt
razem 44
drwx------ 5 lukasz lukasz 4096 gru 29 19:50 Desktop
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Dokumenty
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Muzyka
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Obrazy
-rw-r--r-- 1 lukasz lukasz 0 maj 24 13:04 pik.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik2.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik.txt
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Pobieranie
-rwxrwxrwx 1 lukasz lukasz 31 cze 10 13:42 skrypt
-rwxrwxrwx 1 lukasz lukasz 32 cze 10 13:41 skrypt~
drwx------ 6 lukasz lukasz 4096 maj 24 13:07 tmp
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Wideo
Zmienne to elementy, które mogą przechowywać wartości. W powłoce istnieją zmienne mogące przechowywać wartości logiczne, tekst i liczby. Nie trzeba deklarować typu zmiennej na samym początku skryptu — wystarczy podać dla niej wartość podczas wpisywania skryptu.
Zmienną definiuje przypisywana do niej wartość. Wartość do zmiennej najlepiej wpisywać w cudzysłowach (przy późniejszych manipulacjach jej wartością lub próbach użycia w innym miejscu skryptu cudzysłów zabezpiecza nas przed wystąpieniem błędu).
Zadeklarujmy zmienną nazywającą się zmienna
i zawierającą słowo tekst
.
#!/bin/bash
zmienna="tekst"
Jak widać, zmienna jest zwykłym tekstem. Przy jej deklarowaniu nie trzeba dodawać żadnych znaków specjalnych przed czy za nią.
#!/bin/bash
zmienna="tekst"
echo zmienna
Przy wyświetlaniu wartości zapisanej w zmiennej należy poprzedzić ją znakiem dolara „$”, aby wyświetlanie zadziałało, to znaczy aby wyświetliła się jej wartość, a nie nazwa zmiennej.
#!/bin/bash
zmienna="tekst"
echo $zmienna
Gdybyśmy nie dodali znaku dolara przed nazwą zmiennej w instrukcji echo
, po wywołaniu tego skryptu zostanie wyświetlona na ekranie wartość tekst
zamiast wartości zmienna
.
[lukasz@localhost ~]$ ./skrypt
zmienna
Skrypt bez dodania znaku dolara przed nazwą zmiennej
[lukasz@localhost ~]$ ./skrypt
tekst
Skrypt ze znakiem dolara przed nazwą zmiennej
Do wypisywania tekstu używamy kilku poleceń, spośród których najpopularniejszym jest echo
.
W celu wypisania tekstu na ekranie użytkownika po poleceniu echo
deklarujemy tekst, który zostanie wyświetlony po wywołaniu skryptu.
#!/bin/bash
echo To jest tekst
Po wywołaniu tego skryptu otrzymamy rezultat:
[lukasz@localhost ~]$ ./skrypt
To jest tekst
-n
Parametr ten nie wypisze na końcu linii znaku nowej linii, dzięki czemu wszystkie informacje zostaną wypisane w jednym wierszu.
#!/bin/bash
echo -n To jest tekst
echo To jest tekst
[lukasz@localhost ~]$ ./skrypt
To jest tekstTo jest teksta
-e
Parametr ten rozpoznaje i interpretuje wszystkie znaki specjalne wpisywane przez nas do skryptu. Znaki specjalne deklaruje się przez poprzedzenie ich znakiem backslasha.
#!/bin/bash
echo -e To jest tekst\a
[lukasz@localhost ~]$ ./skrypt
To jest tekst
-E
Parametr ten powoduje nieinterpretowanie znaków specjalnych we wpisywanym tekście i pomija ich wykonanie.
#!/bin/bash
echo -E To jest tekst\a
[lukasz@localhost ~]$ ./skrypt
To jest teksta
\a
Parametr powoduje pojawienie się alarmu w postaci sygnału dźwiękowego.
#!/bin/bash
echo -e To jest tekst\a
\b
Ten parametr po wypisaniu tekstu przesuwa kursor o jeden znak bliżej początku tekstu.
#!/bin/bash
echo -e To jest tekst\b
\c
Parametr powoduje niewypisanie znaku nowego wiersza na końcu linii.
#!/bin/bash
echo -e To jest tekst\c
\f
Ten parametr powoduje wysunięcie strony i zmianę miejsca kursora w tekście.
#!/bin/bash
echo -e To jest tekst\f
\n
Parametr powoduje pojawienie się nowego wiersza po zakończeniu wypisywania tekstu.
#!/bin/bash
echo -e To jest tekst\n
\r
Parametr powoduje powrót karetki do początku linii.
#!/bin/bash
echo -e To jest tekst\r
\t
Parametr powoduje pojawienie się znaku tabulacji w poziomie.
#!/bin/bash
echo -e To jest tekst\t
\v
Paremetr powoduje pojawienie się tabulacji w pionie.
#!/bin/bash
echo -e To jest tekst\v
\\
Parametr ten służy do wypisania znaku backslasha.
#!/bin/bash
echo -e To jest tekst\\
\'
Parametr ten pozwala na wypisanie pojedynczego cudzysłowu.
#!/bin/bash
echo -e To jest tekst\'
\”
Parametr pozwala na wypisanie podwójnego cudzysłowu.
#!/bin/bash
echo -e To jest tekst\”
\nnn
Parametr ten pozwala na wypisanie znaku z tabeli kodów ASCII o ósemkowej notacji.
#!/bin/bash
echo -e To jest tekst\nnn
W powłoce — tak jak w każdym innym języku programowania — występują wartości logiczne, czyli wartości TRUE
lub FALSE
. W systemie wartość 0
zawsze oznacza prawdę, czyli TRUE
, a jakakolwiek inna wartość oznacza fałsz, czyli wartość FALSE
.
Wszystkie programy działające w powłoce zwracają informację o tym, czy udało im się poprawnie zakończyć działanie. Wartość ta jest umieszczana w specjalnej zmiennej $?.
#!/bin/bash
vdir /home/lukasz
echo $?
Program ten powinien na końcu wyświetlić liczbę określającą, czy udało mu się wyświetlić katalog, czy też nie.
[lukasz@localhost ~]$ ./skrypt
razem 44
drwx------ 5 lukasz lukasz 4096 gru 29 19:50 Desktop
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Dokumenty
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Muzyka
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Obrazy
-rw-r--r-- 1 lukasz lukasz 0 maj 24 13:04 pik.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik2.txt
-rw-r--r-- 1 lukasz lukasz 7 maj 24 17:30 plik.txt
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Pobieranie
-rwxrwxrwx 1 lukasz lukasz 39 cze 11 18:30 skrypt
-rwxrwxrwx 1 lukasz lukasz 34 cze 11 18:20 skrypt~
drwx------ 6 lukasz lukasz 4096 maj 24 13:07 tmp
drwxrwxr-x 2 lukasz lukasz 4096 lis 24 2005 Wideo
0
Jak widać powyżej, katalog został wyświetlony i dlatego program zwrócił wartość TRUE
, czyli liczbę 0
na końcu kodu. W przypadku niepowodzenia zwróciłby wartość 1
, tak jak poniżej.
[lukasz@localhost ~]$ ./skrypt
vdir: /home/lukasz2: Nie ma takiego pliku ani katalogu
1
Druga część:
http://www.linuxportal.pl/artykuly/tworzenie-skryp/.../r-id113624
Wpisy z blogów/ TOP 30dni