« wróć do listy
Następny Wpis NA LIŚCIE (W DÓŁ)
Uruchamiamy oficjalnie dział Blogi oraz Wpisy z blogów na LinuxPortal.pl Blog firmowy LinuxPortal.pl
11 osób twierdzi: warto przeczytać
Następny Wpis NA LIŚCIE (W GÓRĘ)
Debian Squeeze ze wsparciem dla jądra 3.2 – instalacja BlogLinux
9 osób twierdzi: warto przeczytać, a 1 , że nie

Fragment (pierwsza część) rozdziału nr 4 Tworzenie skryptów powłoki z książki: Linux. Komendy i polecenia. Wydanie III.

Rozdział 4. Tworzenie skryptów powłoki

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

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

Wypisywanie tekstu na ekranie użytkownika

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

Wartości logiczne

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

Udostępnij informacje o Wpisie w sieciach społecznościowych:
Polub LinuxPortal.pl:

Komentarze:

Nie ma jeszcze komentarzy. Dodaj swój komentarz.
logo:
Aby dodać komentarz: zaloguj się ikona LinuxPortal.pl ikona Facebook.com ikona Google+

Wpisy z blogów/ TOP 30dni

Pliki /etc/shadow, /etc/security/passwd i /etc/group - Dodawanie nowych użytkowników - cz.3 Fragmenty artykułów z książek wydawnictwa Helion.pl
41 osób twierdzi: warto przeczytać
Polecenia useradd i newusers - Dodawanie nowych użytkowników - cz.5 Fragmenty artykułów z książek wydawnictwa Helion.pl
39 osób twierdzi: warto przeczytać
Prosta kompilacja jądra jack
35 osób twierdzi: warto przeczytać
Linux for Woman Beings KDEFamily.pl
35 osób twierdzi: warto przeczytać
Wpisy z blogów więcej:
W związku z wejściem w życie 25 maja 2018 roku nowego Rozporządzenia o Ochronie Danych Osobowych znanym jako "RODO" pragniemy poinformować Cię,
w jaki sposób przetwarzane są dane osobowe pozostawiane przez Ciebie podczas korzystania z LinuxPortal.pl.
Zapoznaj się z Polityką prywatności.

Klikając „Zamknij”, zamykasz ten komunikat i wyrażasz zgodę na przetwarzanie tych danych, w tym w plikach cookies, przez LinuxPortal.pl sp. z o.o. w celu realizacji usług zgodnie z Regulaminem.
Zamknij »