Powłoka (shell)


Rozdział 3
Powłoka (shell)
3.1 Charakterystyka ogólna
Po zarejestrowaniu się w systemie użytkownik ma dostęp do systemu poprzez interpretator
poleceń zwany powłoką (ang. shell). Z tego poziomu może uruchamiać programy aplikacyjne
bądz ogólnie dostępne programy systemowe.
Powłoka w systemie UNIX zapewnia komunikację miedzy użytkownikiem a systemem. Jest
ona w stosunku do jądra systemu zwykłą aplikacją, często dopasowywaną do indywidualnych
potrzeb i preferencji użytkownika.
W działającym systemie zazwyczaj dostępnych jest kilka różnych powłok, np. Bourne Shell 
sh, Berkeley C Shell  csh, czy bardzo ostatnio popularny Bourne Again Shell  bash. Różnice
miedzy nimi polegają głównie na sposobie programowania w języku powłoki, różnią się również
możliwościami oferowanych usług i udogodnień związanych z pracą w systemie.
Powłoka jest inicjowana automatycznie po zarejestrowaniu się użytkownika w systemie. Skoro
jest to zwykła aplikacja, to jej nowy egzemplarz można uruchomić w dowolnej chwili poleceniem
np. sh.
Powłoka przyjmuje polecenie od użytkownika, dekoduje je i przekazuje do jądra w celu wy-
konania. Pracę powłoki można przedstawić algorytmicznie jako ciąg następujących czynności:
1. wysłanie znaku gotowości na terminal (zazwyczaj: $, % lub #);
2. przyjęcie polecenia od użytkownika;
3. zdekodowanie polecenia, odszukanie w katalogach odpowiadającego mu programu;
4. przekazanie polecenia do jądra, w celu uruchomienia odpowiedniego procesu (lub procesów)
realizującego polecenie i oczekiwanie na jego zakończenie;
28 pazdziernika 2001 roku wersja 0.2 38
5. przyjęcie odpowiedzi od jądra i przekazanie tych wyników użytkownikowi, powrót do punk-
tu pierwszego .
Czynności te wykonywane są w pętli aż do napotkania polecenia kończącego działanie powłoki
lub odebrania znaku Ctrl-D, oznaczającego koniec pliku (wejściowego).
W niniejszej pracy skoncentrowano się głównie na shellu Bourne a, ponieważ jest to powłoka
najczęściej spotykana, część przykładów podano również dla bash a, gdyż jest to w tej chwili
chyba najwygodniejsza powłoka.
3.2 Programowanie w języku powłoki
Powłoka umożliwia konstrukcję bardziej złożonych struktur programowych niż podane we wcze-
śniejszym rozdziale. Są to:

operowanie zmiennymi;

tworzenie procedur powłoki (tzw. skryptów);

używanie struktur sterujących;

wykorzystywanie poleceń wewnętrznych.
Tworzenie procedur powłoki, używanie struktur sterujących oraz wykorzystywanie poleceń we-
wnętrznych opisano szczegółowo w rozdziale ??.
3.2.1 Grupowanie poleceń
Polecenia można zagnieżdżać za pomocą nawiasów okrągłych () lub grupować w nawiasach

klamrowych .
Nawiasy okrągłe służą do grupowania poleceń, które będą wykonywane jako samodzielny
proces, np. proces wykonywany w tle, wówczas znak & lub przeadresowujące wejście/wyjście są
obowiązujące dla całej grupy poleceń. Stan końcowy (exit status) jest wynikiem powstałym po
wykonaniu ostatniego polecenia.

Nawiasy klamrowe służą do grupowania poleceń wykonywanych w shellu bieżącym. Znaki
traktowane są przez powłokę jak polecenia, tzn. po nich koniecznie musi wystąpić znak spacji,
a ostatnie polecenie w klamrach musi zostać zakończone średnikiem. Nawiasy klamrowe mogą
również służyć do oddzielenia zmiennej od innych znaków.
Przykład 3.2.1
Poniższa sekwencja poleceń spowoduje wyświetlenie napisu: To jest test.
28 pazdziernika 2001 roku wersja 0.2 39
a= To jest 

echo "$ a test"
Ciąg poleceń zawarty w nawiasach okrągłych jest wykonywany jako samodzielny, podrzędny
proces powłoki. Zmiany w otoczeniu powstałe w tym procesie nie będą więc oddziaływały na
aktualny proces powłoki. Natomiast polecenia zawarte w nawiasach klamrowych wykonywany

jest w aktualnym shellu. Efekty powstałe poprzez zastosowanie nawiasów () i przedstawia
przykład ??.
Przykład 3.2.2
$ pwd
/home/students
$ (cd /bin ; ls mkdir)
mkdir
$ pwd
/home/students
$ cd /bin ; ls mkdir;
mkdir
$ pwd
/bin
3.2.2 Zmienne powłoki
Nazwy zmiennych stanowią ciągi znaków zaczynające się od litery i mogą składać się z liter, cyfr
i znaków podkreślenia (_). Nazwy zmiennych muszą zawierać co najmniej jeden znak. Przypisa-
nie wartości zmiennej wykonuje się w następujący sposób:
zmienna =wartość
Domyślnym typem zmiennych jest typ napisowy i w zasadzie nie używa się innych typów do
określenia zmiennych. Dodatkowo shell bash oferuje komendę typset, za pomocą której można
deklarować typ zmiennej. Oto wybrane możliwości tej komendy:
-i - typ integer;
-u - wielkie litery;
-l - małe litery;
-x - zmienna eksportowalna;
28 pazdziernika 2001 roku wersja 0.2 40
-r - tylko do czytania.
Przykład 3.2.3
Przykłady przypisania wartości zmiennym:
$ os=LINUX
$ sys=586
$ user= who am i
dodatkowo w bash:
$ typeset -i sys=586
$ typeset -u os=Linux
$ typeset +u os
Aby odwołać się do wartości zmiennej należy poprzedzić ją znakiem $.
Do wyświetlania wartości zmiennych globalnych służy polecenie env, natomiast do wyświetlenia
zmiennych lokalnych służy polecenie set. Poleceniem echo można wyświetlić wartości pojedyn-
czych zmiennych.
Dodatkowo bash oferuje do wyświetlania zawartości zmiennych polecenie print, a do podsta-
wienia wyniku polecenia jako wartości zmiennej oferuje konstrukcję: $(polecenie ).
Przykład 3.2.4
$ os=LINUX
$ sys=586
$ echo $os na $sys
LINUX na 586
$ print $os
LINUX
Przykład 3.2.5
Ustawianie ścieżki przeszukiwań dla użytkownika zgłaszającego się do systemu. Inna ścieżka
przypisana będzie użytkownikowi root, a inna pozostałym użytkownikom systemu.
if [ "$USER" != "root" ]; then
PATH=$HOME/bin:$PATH
else
PATH=/etc:/usr/etc:$PATH
fi
28 pazdziernika 2001 roku wersja 0.2 41
Zmienne predefiniowane
Powłoka posiada szereg zmiennych o wartościach zdefiniowanych pierwotnie (predefiniowanych).
Należą do nich między innymi zmienne PS1 i PS2 (monity systemowe), HOME (nazwa katalogu
osobistego), PATH (zbiór katalogów przeszukiwanych przez system operacyjny w celu znalezienia
programów) i wiele innych. Wartość tych zmiennych może być zmieniana przez użytkownika.
Jeśli pewne zmienne są używane w każdej sesji użytkownika, najwygodniej zapisać je w pliku
.profile, który powinien znajdować się w katalogu osobistym użytkownika. Plik ten definiuje
prywatne środowisko użytkownika, a jest wykonywany zawsze w momencie uruchomienia sesji.
Plik ten może zawierać oprócz definicji zmiennych również polecenia, które będą wykonywane
zawsze po zarejestrowaniu się użytkownika.
Inne zmienne predefiniowane przydatne przy wykonywaniu skryptów shell a przedstawia roz-
dział ??.
Zakres ważności zmiennych
Zakresem ważności zmiennych jest standardowo aktualny proces powłoki. Jeżeli zakres ten ma
zostać rozszerzony, to zmienna musi zostać przesłana do procesów podrzędnych poleceniem:
export zmienna
Instrukcja readonly
Instrukcja readonly służy do określenia zmiennych, których wartości nie mogą być zmieniane.
Zmiennych deklarowanych jako readonly nie można usunąć ze środowiska. Atrybut readonly
nie jest przenoszony do shelli potomnych. Wydanie polecenia readonly bez argumentów spo-
woduje wyświetlenie listy zmiennych z ustawionym atrybutem readonly.
Przykład 3.2.6
$ readonly HOME
$ HOME=.
HOME: read-only variable
Dodatkowe informacje dotyczące zmiennych zawiera rozdział ??.
28 pazdziernika 2001 roku wersja 0.2 42
3.3 Substytucja tekstów
Zasady zastępowania zmiennych powłoki występujących w linii polecenia ich wartościami (sub-
stytucja parametrów), przedstawia rozdział ??. Rozdział 2.2.3 omawia zasady rozszerzania nazw
plików zawierających metaznaki * ? [] (substytucja nazw).
Przed wykonaniem polecenia powłoka dokonuje substytucji parametrów, następnie substy-
tucji nazw i dopiero tak rozszerzone argumenty przekazywane są do wykonania wywołanemu
poleceniu.
Jeśli substytucja parametrów lub substytucji nazw ma nie zostać dokonana, to odpowiedni
łańcuch znaków należy ująć w znaki cudzysłowu, wzgl. pojedynczy znak w łańcuchu poprze-
dzić symbolem lewego ukośnika \. Substytucja tekstów zawartych w apostrofach, cudzysłowach
i akcentach w literaturze nosi nazwę mechanizmów klamrowania (ang. quoting mechanisms).
Mechanizm ten używa następujących znaków:
\  lewy ukośnik  zabiera znaczenie występującemu po nim znakowi.
  apostrof  blokuje znaki specjalne do wystąpienia następnego apostrofu.
"  cudzysłów  blokuje specjalne znaczenie wszystkich znaków poza $ (substytucja
zmiennej) i  (substytucja wyników polecenia).
  akcent  łańcuch zawarty między dwoma akcentami traktowany jest jak komenda i
jest wykonywany.
Przykład 3.3.7
$ echo \
> ^D
$ echo  \
\
$ echo \

$ _
Przykład 3.3.8
Wypróbuj poniższe polecenia:
$ echo  Jesteśmy w katalogu $HOME
$ echo "Jesteśmy w katalogu $HOME"
$ echo  Jesteśmy w katalogu $HOME
28 pazdziernika 2001 roku wersja 0.2 43
$ echo  Dzisiaj jest  date 
$ echo "Dzisiaj jest  date "
Tylko w drugim przypadku z każdej pary nastąpi substytucja, odpowiednio nazwy katalogu
domowego i bieżącej daty.
Przykład 3.3.9
W systemie V i BSD polecenie echo wywołuje się z innymi parametrami, aby nie przenosiło
kursora do nowej linii.
BSD: echo -n Wciśnij [t] aby kontynuować; read odp
SysV: echo Wciśnij [t] aby kontynuować \c; read odp
Oto fragment skryptu, uniezależniający działanie polecenia echo:
if [ " echo -n  " = "-n" ]; then
n=""
c="\c"
else
n="-n"
c=""
fi
Wywołanie: echo $n komunikat $c
28 pazdziernika 2001 roku wersja 0.2 44


Wyszukiwarka

Podobne podstrony:
Ghost in the Shell 2 0 (2008) [720p,BluRay,x264,DTS ES] THORA
Hide In Your Shell
shell
Powłoka BASH
shell
Lab Programowanie w jezyku powloki
upr shell
Shell Chords
wykl teoria sprezystosci teoria cienkich plyt i powlok
Statyka stanu bezmomentowego powłoki hiperboloidalnej
18 Nakladanie powłok malarskich metodą elektroforetyczną
Attenuation of Blast Overpressures from Liquid in an Elastic Shell
Kryteria rysoodporności powłok ochronnych
Powłoki antyodblaskowe

więcej podobnych podstron