S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
1
P
P
O
O
W
W
Ł
Ł
O
O
K
K
A
A
S
S
Y
Y
S
S
T
T
E
E
M
M
U
U
U
U
N
N
I
I
X
X
P
P
R
R
O
O
G
G
R
R
A
A
M
M
O
O
W
W
A
A
N
N
I
I
E
E
P
P
O
O
W
W
Ł
Ł
O
O
K
K
P
P
O
O
D
D
R
R
C
C
Z
Z
N
N
I
I
K
K
Powłoka (ang. shell) jest interfejsem mi dzy u ytkownikiem a systemem operacyjnym. Jej
podstawow funkcj jest interpretacja i wykonanie polece u ytkownika. W celu ułatwienia
wprowadzania cz sto powtarzaj cych si ci gów polece dla systemu operacyjnego powłoka
udost pnia j zyk programowania polece u ytkownika (b dzie on dalej nazywany j zykiem
powłoki).
Najcz ciej stosowanymi powłokami w ró nych implementacjach systemu UNIX s :
•
powłoka Bourne'a (
sh
)
•
powłoka Korna (
ksh
)
•
powłoka C (
csh
)
lub ich modyfikacje, b d ce dziełem ró nych programistów i udost pnione przez nich do
swobodnego wykorzystania (np. powłoki:
bash
,
zsh
,
tcsh
).
Niniejsze opracowanie zawiera opis podstawowych własno ci powłoki
ksh
. Praktycznie wszystkie
podane tu informacje odnosz si równie do powłok
zsh
i
POSIX-sh
, wi kszo tak e do powłoki
sh
.
1. Podstawowe poj cia
U ytkownik mo e wprowadza polecenia dla systemu operacyjnego na dwa sposoby:
•
wypisuj c je z klawiatury, lub
•
umieszczaj c ci g polece w pliku tekstowym, a nast pnie u ywaj c nazwy tego pliku jako
komendy. Plik taki b dziemy dalej nazywa skryptem.
Ci g znaków wprowadzany przez u ytkownika z klawiatury (lub linie skryptu) jest przez powłok
dzielony na słowa, tj. ci gi znaków rozdzielone którym z nast puj cych symboli:
; & ( ) | < >
nl (nowa linia)
spacja (odst p)
TAB
(powy sze symbole nazywa si metaznakami).
Pierwsze słowo w linii jest nazw komendy, pozostałe słowa to parametry przekazywane
komendzie, w ród których mo emy wyró ni opcje, zazwyczaj poprzedzane znakiem
-
(minus)
oraz argumenty. Niektóre komendy s wbudowane w powłok (np. komenda
cd
), zazwyczaj jednak
s to nazwy plików binarnych lub skryptów.
P
RZYKŁAD
1.1
ls -a -l *.c *.h
nazwa opcje argumenty
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
2
Linie rozpoczynaj ce si znakiem
#
s liniami komentarza i s ignorowane przez powłok .
Komenda pobiera dane ze standardowego wej cia (ang. standard input, w skrócie stdin), którym
zazwyczaj jest klawiatura terminala. Wyniki działania komendy s wyprowadzane na standardowe
wyj cie (standard output, stdout), którym normalnie jest monitor terminala. Informacje o bł dach s
kierowane na standardowe wyj cie diagnostyczne (standard error, stderr). W dalszej cz ci
niniejszych materiałów zostan opisane sposoby zmiany przywi zania standardowego wej cia i
wyj cia.
Kilka komend mo na poł czy w potok, rozdzielaj c je metaznakiem
|
, np.:
P
RZYKŁAD
1.2
ls -l | grep kowalski | more
Konstrukcja taka oznacza, e standardowe wyj cie pierwszej komendy b dzie standardowym
wej ciem drugiej komendy potoku, z kolei standardowe wyj cie drugiej komendy b dzie
standardowym wej ciem trzeciej komendy itd. W powy szym przykładzie wynik działania
komendy
ls
b dzie wej ciem dla komendy
grep
która wybierze linie zawieraj ce słowo
kowalski,
a zatem pliki, których wła cicielem jest u ytkownik kowalski (chyba, e w nazwie pliku tak e
pojawi si ci g znaków
kowalski
). Z kolei informacja b d ca wynikiem działania komendy
grep
zostanie wy wietlona na ekranie monitora za pomoc programu
more
.
Ci g potoków lub komend oddzielonych znakami
;
( rednik) lub
&
(ampersand) b dziemy nazywa
list komend (lub po prostu list ). U ycie jako separatora znaku rednika oznacza, e komenda
wyst puj ca przed rednikiem musi si zako czy zanim powłoka rozpocznie wykonywanie
komendy po redniku. U ycie jako separatora znaku
&
spowoduje, e komendy rozdzielone tym
znakiem b d si wykonywały równolegle (asynchronicznie).
P
RZYKŁAD
1.3
# Zamiana nazw plików a i b:
cp a tmp ; mv b a ; mv tmp
Ka da komenda zwraca pewna warto całkowitoliczbow , któr nazywamy statusem wyj cia
komendy. Warto zero oznacza, e komenda zako czyła si sukcesem. Warto ro na od zera jest
zwracana w przypadku bł dów i sytuacji nietypowych.
2. Zmienne powłoki
Zmienne powłoki pozwalaj przypisa nazwie symbolicznej pewien ci g znaków lub liczb
całkowit . Zmienn tak definiujemy przez instrukcje przypisania o postaci
zmienna=warto
gdzie:
zmienna jest nazwa zmiennej, warto jest ci giem znaków, który przypisujemy danej zmiennej.
Od chwili zdefiniowania zmiennej mo emy u ywa jej nazwy wsz dzie tam, gdzie chcieliby my
napisa ci g znaków warto . Nazw zmiennej musimy poprzedzi znakiem
$
, tj. musimy napisa
$
zmienna lub
${
zmienna
}
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
3
Tej drugiej postaci u ywamy zazwyczaj wtedy, gdy powłoka mo e mie problem z jednoznacznym
okre leniem nazwy zmiennej.
P
RZYKŁAD
2.1
system=UNIX
echo To jest system $system # Zostanie wypisany tekst:
To jest system UNIX
txt=abc
echo ${txt}def # Zostanie wypisany tekst abcdef. Je li
nazwa zmiennej txt nie byłaby zamkni ta w
nawiasy, to powłoka szukałaby zmiennej
txtdef
x=5 prog # Definicja zmiennej u yta przed nazwa komendy oznacza,
e zmienna jest znana tylko podczas wykonywania tej komendy.
W powłoce, uruchamianej po zalogowaniu si u ytkownika, jest zdefiniowanych wiele zmiennych
(ich liczba i nazwy zale od rodzaju powłoki). Poni ej zamieszczono przykłady wa niejszych
zmiennych predefiniowanych przez system operacyjny lub powłok :
#
: Liczba parametrów pozycyjnych (patrz ni ej)
$
: Numer procesu powłoki
PPID
: Numer procesu rodzicielskiego
HOME
: Prywatny katalog u ytkownika
: Skrzynka pocztowa u ytkownika
PWD
: Katalog aktualny
OLDPWD
: Katalog sprzed ostatniej komendy
cd
SHELL
: Nazwa powłoki
RANDOM
: Liczba losowa
PATH
: Scie ka przeszukiwa
SECONDS
: Liczba sekund od rozpocz cia pracy
PS1
: Tekst wy wietlany jako znaki gotowo ci do pracy systemu
PS2
: Jak wy ej, w przypadku kontynuacji komendy
EDITOR
: Edytor u ytkownika
TERM
: Nazwa terminala, z którego pracuje u ytkownik
Niektóre z powy szych zmiennych (np.
PWD
,
RANDOM
) nie wyst puj w powłoce Bourne'a (sh).
Jak ju wspomniano, zestaw komend mo na zapisa na dysku w postaci skryptu i wykona go
wypisuj c jego nazw . Skrypt taki wykonuje si w osobnej kopii powłoki. Je li wywołamy skrypt
podaj c w oprócz nazwy równie parametry, to parametry te s dost pne wewn trz skryptu jako
zmienne o nazwach
$1
,
$2
,
$3
, ...
$
n. Zmienne te nosz nazw zmiennych pozycyjnych. Liczba n
zmiennych pozycyjnych jest dost pna jako zmienna
$#
.
Zmienne powłoki mog by lokalne, czyli obowi zuj ce tylko w danej powłoce, lub rodowiskowe
(eksportowane). W tym drugim przypadku obowi zuj równie w powłokach potomnych, tj.
uruchomionych z danej powłoki (np. przez wykonanie skryptu lub jawne wywołanie programu
powłoki). Zmienna zdefiniowana instrukcj przypisania jest zmienn lokaln . Zmienna staje si
globalna po u yciu nazwy zmiennej jako argumentu komendy
export
zmienna ...
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
4
P
RZYKŁAD
2.2
aa=XXX
bb=YYY
export aa
ksh
echo $aa $bb # Zostanie wypisany tekst: XXX (zmienna bb
nie zostala wyeksportowana i nie jest
dost pna w powłoce potomnej)
List zdefiniowanych zmiennych powłoki (i przypisane im warto ci) mo na uzyska za pomoc
komendy
set
. List zmiennych rodowiskowych otrzymamy po u yciu komendy
env
.
3. Substytucje wykonywane przez powłok
Polecenia wypisywane przez u ytkownika z klawiatury lub programy (skrypty) w j zyku powłoki
przed prób wykonania mog by przez powłok modyfikowane. Jedna z takich modyfikacji
została ju opisana powy ej: ci gi znaków poprzedzone znakiem
$
s interpretowane jako zmienne
powłoki i zast powane warto ciami odpowiednich zmiennych. Modyfikacje wykonywane przez
powłok b dziemy nazywa substytucjami. U ytkownik wykonywanie niektórych substytucji mo e
zablokowa (np. stosuj c przeł czniki powłoki).
3.1. Aliasy
Powłoka sprawdza, czy pierwsze słowo komendy ma zdefiniowany alias (synonim). Alias,
podobnie jak zmienna powłoki, to pewna nazwa, której przypisano ci g znaków. U ytkownik mo e
zdefiniowa synonimy wybranych komend za pomoc komendy o postaci
alias
synonim
=
ci g_znaków
Oczywi cie, ci g_znaków musi by mo liwy do zinterpretowania jako nazwa komendy lub listy
komend. Mechanizm aliasów wyst puje w powłokach Korna i
zsh
, nie wyst puje w powłoce
Bourne'a.
P
RZYKŁAD
3.1.1
alias dir=ls # Dwa ulubione aliasy u ytkowników
alias md=mkdir # systemu MS DOS
alias ll='ls -al'
alias llm='ll | more'
W dwóch ostatnich przykładach znaki cudzysłowu pozwalaj przypisa nazwom
ll
i
llm
ci gi
znaków zawieraj ce spacje. Z ostatniego przykładu wida , e przy definicji aliasu mo na u y
innego aliasu.
3.2. Substytucja cie ki
Je eli pierwszym znakiem słowa jest znak
~
(tylda), to powłoka zast pi ten znak nazw prywatnego
katalogu u ytkownika. Substytucja taka b dzie wykonana tylko wtedy, je eli tylda jest jedynym
znakiem w słowie lub pozostała cz
słowa rozpoczyna si uko nikiem. Powłoka interpretuje
równie nast puj ce konstrukcje rozpoczynaj ce si od tyldy:
~user : nazwa prywatnego katalogu u ytkownika user
~+
: nazwa aktualnego katalogu
~-
: nazwa katalogu aktualnego przed ostatni komend
cd
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
5
P
RZYKŁADY
3.2.1
Je eli prywatnym katalogiem u ytkownika jest
/home/janek
, to:
~ = /home/janek
~/doc = /home/janek/doc
~marek/bin = /home/marek/bin
~+/doc = $PWD/doc
3.3. Substytucja wyniku komendy
U ycie konstrukcji o postaci
$(
lista
)
(gdzie lista oznacza komend lub ci g komend/potoków) spowoduje, e powłoka wykona komendy
składaj ce si na list , i tekst stanowi cy wynik działania ostatniej komendy (tj. wysyłany przez t
komend na standardowe wyj cie) zast pi pokazan wy ej konstrukcj (od znaku
$
do nawiasu
zamykaj cego wł cznie). Równowa n konstrukcj do omawianej jest:
`
lista
`
(nale y zwróci uwag , e wyst puj ce w tej konstrukcji znaki to "odwrócone" znaki cudzysłowu).
P
RZYKŁAD
3.3.1
Wy wietlenie listy plików, których wła cicielem jest u ytkownik:
ls -l | grep `who am i`
Przeniesienie plików, których nazwy s wymienione w pliku
filelist
do katalogu
dane
:
mv $(cat filelist) dane/
3.4. Generacja nazw plików
Je eli słowo stanowi ce cz
komendy interpretowanej przez powłok zawiera znaki
* ? [ ]
to słowo to zostanie potraktowane jako wzorzec i zast pione przez powłok list słów - nazw
plików lub katalogów pasuj cych do tego wzorca. Przy generacji nazw plików obowi zuj
nast puj ce reguły:
•
znak
*
oznacza dowolny ci g znaków (równie ci g pusty),
•
znak
?
oznacza jeden dowolny znak,
•
konstrukcja
[abc]
oznacza dokładnie jeden znak spo ród umieszczonych w nawiasach;
u ycie znaku
^
jako pierwszego zmienia znaczenie konstrukcji na: znak inny ni
wymienione w nawiasach. Mo na tak e w nawiasach poda zakres znaków przez podanie
pierwszego i ostatniego znaku zakresu rozdzielonych znakiem
-
.
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
6
a*z
pasuje do nazw plików zaczynaj cych si na liter
a
i ko cz cych na liter
z
, np.
az
,
aaz
,
axyz
.
*.c
pasuje do nazw plików maj cych ko cówk
.c
, np.
prog.c
,
func.c
.
[aeou]la
pasuje do nazw:
ala
,
ela
,
ola
,
ula
.
[A-Za-z]*
pasuje do nazw plików zaczynaj cych si od litery.
4. Cytowanie (quoting)
Mo e si zdarzy , e w pewnych sytuacjach powłoka zinterpretuje wprowadzane komendy
niezgodnie z intencj u ytkownika. Mo na si przed tym zabezpieczy odbieraj c niektórym
znakom (traktowanym przez powłok w sposób szczególny) ich specjalne znaczenie. Słu y do tego
mechanizm cytowania znaków. W omawianych w niniejszym opracowaniu powłokach mo na
stosowa trzy sposoby cytowania:
\x
odwrócony uko nik kasuje specjalne znaczenie znaku stoj cego bezpo rednio za nim,
'...'
pojedyncze znaki cudzysłowu kasuj specjalne znaczenie wszystkich znaków pomi dzy nimi,
"..."
podwójne znaki cudzysłowu kasuj specjalne znaczenie wszystkich znaków pomi dzy nimi, za
wyj tkiem znaku $ (substytucja zmiennych powłoki) i znaku
\
.
P
RZYKŁADY
4.1
$
echo \$HOME = $HOME
$HOME = /users/imie
$
X=2 ; echo '$X > 1'
$X > 1
$
echo "$X > 1\n -------"
2 > 1
-------
5. Wyra enia arytmetyczne
Zmienne powłoki mog przyjmowa warto ci całkowitoliczbowe, i na zmiennych o takich
warto ciach mo na wykonywa operacje arytmetyczne. Składnia wyra e arytmetycznych
przypomina składni j zyka C. Mo na stosowa dwie równowa ne postacie zapisu wyra e
arytmetycznych:
let
wyra enie
lub
((
wyra enie
))
(w przypadku stosowania drugiej podanej postaci nale y pami ta o odst pach wokół podwójnych
nawiasów).
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
7
P
RZYKŁADY
5.1
x=1; y=2
# przypisanie warto ci liczbowych zmiennym x i y
let "x=x+1"
# zwi kszane warto ci x o 1
echo x = $x # zostanie wypisane: x = 2
(( x = x+y )) # tutaj nie jest potrzebne cytowanie
echo x = $x # zostanie wypisane: x = 4
6. Konstrukcje steruj ce j zyka powłoki
Powłoki omawiane w niniejszym opracowaniu udost pniaj u ytkownikowi wiele konstrukcji
steruj cych, pozwalaj cych na warunkowe wykonywanie polece , zautomatyzowanie wykonanie
powtarzaj cych si komend itp. Konstrukcje steruj ce powoduj , e j zyk powłoki jest w pełni
funkcjonalnym j zykiem programowania.
6.1. Instrukcja warunkowa
Instrukcja warunkowa pozwala wykona zestaw (list ) komend, je li spełniony jest warunek
okre lony przez u ytkownika. Najprostsz postaci instrukcji warunkowej jest:
if
warunek
then
lista
fi
Wyst puj cy w instrukcji warunek, od którego uzale nione jest wykonanie zestawu komend lista,
to zazwyczaj wyra enie o nast puj cej postaci:
[[ wyra enie_warunkowe ]]
gdzie wyra enie_warunkowe mo e by jedna z ni ej podanych konstrukcji:
-a
fname
plik lub katalog o nazwie fname istnieje
-d
fname
fname jest nazwa katalogu
-f
fname
fname jest nazwa zwykłego pliku
-w
fname
u ytkownik ma prawo zapisu pliku fname
-x
fname
u ytkownik ma prawo wykonania pliku fname
napis
=
wzorzec
napis i wzorzec s zgodne
wyr1
-eq
wyr2
warto ci wyra e wyr1 i wyr2 s równe; zamiast
-eq
mo na u y :
-ne
(ró ne),
-lt
(mniejsze),
- gt
(wi ksze),
-le
(mniejsze lub równe),
- ge
(wi ksze lub równe)
war1
||
war2
alternatywa warunków war1 i war2
war1
&&
war2
koniunkcja warunków war1 i war2
!war
negacja warunku war
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
8
Mo liwych wyra e warunkowych jest zwykle wi cej (zale y to od rodzaju powłoki, najbogatsze
mo liwo ci ma powłoka
zsh
), powy ej wymieniono te, które s najcz ciej u ywane.
Innym sposobem okre lenia warunku jest komenda
test
warunek
lub (równowa nie)
[
warunek
]
Komenda
test
zwraca warto zero je li warunek jest spełniony, i warto ro n od zera w
przeciwnym przypadku. Jako warunku mo na tak e u y dowolnej komendy lub listy komend -
warunek b dzie spełniony je li komenda taka zako czy si sukcesem, tj. zwróci status wyj cia
równy zeru; w przeciwnym przypadku warunek nie b dzie spełniony.
P
RZYKŁAD
6.1.1
if [[ "$1" = '-h' ]]
then
echo Sposób u ycia:
echo prog [-h] plik1 plik2 ...
fi
if test -f /tmp/xxx
then
rm /tmp/xxx
fi
Oprócz opisanej powy ej, mo na u y bardziej rozbudowanych postaci instrukcji warunkowej:
if
warunek
then
lista1
else
lista2
fi
if
warunek1
then
lista1
elif
warunek2
then
lista2
elif
warunek3
then
lista3
...
else
lista
fi
W pierwszej z powy szych postaci lista1 zostanie wykonana je li warunek jest spełniony, a lista2 -
je li nie jest. W drugim przypadku je li spełniony jest warunek1, to zostanie wykonana lista1. Je li
nie b dzie on spełniony, to zostanie sprawdzony warunek2, i je li b dzie on spełniony, to wykonana
zostanie lista2 itd. Je li aden z warunków: warunek1, warunek2, warunek3 ... nie jest spełniony, to
zostanie wykonana lista wyst puj ca po klauzuli
else
.
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
9
P
RZYKŁAD
6.1.2
if [[ -d $1 ]]
echo Usuwam wszystkie pliki z katalogu $1
rm $1/*
elif [[ -f $1 ]]
echo Usuwam plik $1
rm $1
else
echo Nie znaleziono pliku ani katalogu o nazwie $1
fi
6.2. Instrukcja wyboru
Instrukcja wyboru pozwala wybra jeden z kilku wariantów (zale nie od warto ci argumentu).
Ogólna posta instrukcji jest nast puj ca:
case
słowo
in
wzorzec1
)
lista1
;;
wzorzec2
)
lista2
;;
...
esac
Je eli słowo i wzorzec1 s zgodne, to zostan wykonane komendy lista1. Je li nie, to sprawdzana
jest zgodno wyra e słowo i wzorzec2, i w przypadku, je li ta zgodno zachodzi, wykonywana
jest lista2, itd. Nale y zwróci uwag , e kolejne listy s ko czone podwójnym rednikiem (ka da
lista mo e składa si z kilku komend oddzielonych pojedynczymi rednikami).
P
RZYKŁAD
6.2.1
case $2 in
y* ) echo Yes ;;
n* ) echo No ;;
* ) echo Maybe ;;
esac
W powy szym przykładzie je li drugi parametr pozycyjny zaczyna si na liter
y
, to zostanie
wypisane słowo
Yes
; je li zaczyna si on na liter
n
, zostanie wypisane słowo
No
. Je li parametr ten
zaczyna si innym ni
y
lub
n
znakiem, zostanie wypisane słowo
Maybe
.
6.3. P tle
P tla słu y do wielokrotnego wykonania ci gu instrukcji. W omawianych w niniejszym
opracowaniu powłokach wyst puj trzy podstawowe rodzaje p tli:
for
,
while
i
until
. P tla
for
pozwala wykona ci g instrukcji sci le okre lon liczb razy. Ogólna posta instrukcji jest
nast puj ca:
for
zmienna
in
słowo1 słowo2 ...
do
lista
done
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
10
Zmiennej zmienna przypisywana jest warto słowo1, i dla tak zdefiniowanej zmiennej
wykonywane s komendy lista. Nast pnie zmienna przyjmuje warto słowo2, wykonywana jest
lista, itd.
P
RZYKŁAD
6.3.1
Aby przenie wszystkie pliki o nazwach zaczynaj cych si na liter
a
do katalogu
Afiles
nale y
u y konstrukcji:
for i in a*
do
mv $i Afiles/
done
Pozostałe dwa rodzaje p tli pozwalaj na wykonanie ci gu polece lista w zale no ci od tego, czy
warunek (którym mo e by wyra enie warunkowe, komenda lub nawet lista komend) jest
spełniony. Ogólna posta obu konstrukcji jest pokazana poni ej. W instrukcji
while
warunek
sprawdza si na pocz tku, i lista jest wykonywana tak długo, jak długo warunek jest spełniony.
Oczywi cie lista powinna zawiera instrukcje wpływaj ce na warunek, gdy w przeciwnym
przypadku instrukcja
while
albo nie wykonałaby si ani razu, albo wykonywałaby si w
niesko czono . W p tli
until
warunek sprawdzany jest na ko cu, i p tla wykonywana jest tak
długo, jak długo warunek nie jest spełniony.
while
warunek
do
lista
done
until
warunek
do
lista
done
Przykłady:
let x=0
while [[ $x -lt 10 ]]
do
echo x = $x
(( x=x+1 ))
done
while : # P tla niesko czona, która nic nie robi
do
:
done
W li cie komend wyst puj cej po słowie
do
mo na u y komend
break
- przerwanie p tli
continue -
powrót do pocz tku p tli
6.4. Funkcje
Ci g polece mo na zdefiniowa (np. na pocz tku skryptu) jako funkcj , a nast pnie wielokrotnie
wykorzystywa t funkcj w ró nych miejscach skryptu z ró nymi parametrami. Funkcje mo na
zdefiniowa w jeden z nast puj cych sposobów:
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
11
function
fname
{
lista
; }
lub
fname
() {
lista
; }
gdzie fname jest nazw funkcji.
P
RZYKŁAD
6.4.1
function swapshvar
{ if [ $# != 2 ]
then
echo Zła liczba argumentów funkcji swapshvar
fi
eval tmp=\$$1
eval $1=\$$2
eval $2=\$tmp
}
x=XX; y=YY
a=AA; b=BB
swapshvar x y
swapshvar a b
echo x=$x, y=$y, a=$a, b=$b
W powy szym przykładzie funkcja
swapshvar
zamienia warto ci dwóch zmiennych powłoki,
których nazwy s podane jako argumenty funkcji.
6.5. Inne konstrukcje powłoki
List komend mo na zamkn w nawiasy okr głe:
(
lista
)
lub klamrowe
{
lista
; }
W pierwszym przypadku lista jest wykonywana w osobnym rodowisku, w drugim - w tym samym
rodowisku co powłoka macierzysta (opisywane konstrukcje w powłoce Bourne'a maja nieco inne
działanie).
P
RZYKŁAD
6.5.1
$
pwd
/home/janek
$
(cd .. ; pwd)
/home
$
pwd
/home/janek
7. Przyporz dkowanie strumieni we/wy
Przy otwarciu pliku jego dane pami tane s w tablicy plików. Indeks do tej tablicy nazywamy
deskryptorem pliku. Zazwyczaj programy wykonuj ce operacje wej cia/wyj cia okre laj plik lub
urz dzenie b d ce ródłem b d odbiorc informacji nie poprzez nazw pliku, ale przez deskryptor
tego pliku.
Nast puj ce deskryptory s zarezerwowane:
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
12
0 standardowe wej cie (standardowo zwi zane z klawiatur terminala),
1 standardowe wyj cie (standardowo zwi zane z monitorem terminala),
2 standardowe wyj cie diagnostyczne (standardowo zwi zane z monitorem terminala).
Dzi ki deskryptorom mo liwa jest bardzo łatwa zmiana przyporz dkowania strumieni we/wy.
Powłoka jest wyposa ona w specjalne mechanizmy ułatwiaj ce takie operacje.
•
Zmiana standardowego wej cia:
prog ...
<
fname
U ycie tej konstrukcji spowoduje, e standardowym wej ciem programu prog b dzie nie klawiatura
terminala, ale plik o nazwie fname.
Konstrukcja (nazywana dokumentem wbudowanym, ang. here document):
prog ...
<<
EOF
...
EOF
spowoduje, e linie od wyst puj cej bezpo rednio za komenda prog a do linii
EOF
b d
standardowym wej ciem dla komendy prog.
EOF
mo e by dowolnym ci giem znaków, wa ne jest
jedynie by do zako czenia dokumentu wbudowanego u y tego samego ci gu znaków, którego
u yto po podwójnym znaku mniejszo ci.
•
Zmiana standardowego wyj cia:
prog ...
>
fname
U ycie tej konstrukcji spowoduje, e standardowym wyj ciem programu prog b dzie nie ekran
monitora, ale plik o nazwie fname. Zamiast pojedynczego mo na u y podwójnego znaku
wi kszo ci:
prog ...
>>
fname
Spowoduje to, e standardowe wyj cie programu prog zostanie dopisane na ko cu pliku fname.
•
Zmiana standardowego wyj cia diagnostycznego:
prog ...
2>
fname
U ycie tej konstrukcji spowoduje, e standardowe wyj ciem diagnostyczne programu prog b dzie
skierowane do pliku o nazwie fname.
Opisany powy ej mechanizm zmiany przypisania standardowych strumieni wej cia/wyj cia mo na
stosowa do strumieni opisanych dowolnymi deskryptorami, np. zapis:
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
13
prog ...
<&
d1
>&
d2
oznacza, e wej ciem komendy prog b dzie plik o deskryptorze d1, a jego wyj ciem - plik o
deskryptorze d2. Cz sto stosowan konstrukcj jest:
prog
1>
fname
2>&1
Konstrukcja taka oznacza, e standardowe wyj cie (deskryptor
1
mo na tu opu ci ) b dzie
skierowane do pliku fname, a standardowe wyj cie diagnostyczne - tam gdzie wskazuje deskryptor
1
, zatem tak e do pliku fname.
8. Skrypty
Przy pisaniu skryptów, które maj by wykonywane przez powłok , nale y pami ta o kilku
sprawach.
Je li chcemy wykona skrypt podobnie jak ka d inn komend , tj. przez napisanie nazwy skryptu
z list parametrów, to skrypt taki winien mie nadany atrybut
x
. Skrypt mo na wykona tak e w
nast puj cy sposób:
sh
<
skrypt
(oczywi cie zamiast
sh
mo na u y nazwy innej powłoki). W obu przypadkach skrypt zostanie
wykonywane w osobnej powłoce. Oznacza to m.in. e w czasie wykonywania skryptu nie b d
widoczne niewyeksportowane wcze niej zmienne powłoki, a zmienne zdefiniowane wewn trz
skryptu znikn po zako czeniu wykonywania si skryptu.
Skrypt mo e by wykonany w ramach aktualnej powłoki za pomoc specjalnej komendy
.
(kropka):
.
skrypt ...
W ten sposób mo na wykona tak e skrypt, któremu nie nadano atrybutu
x
.
Parametry przekazywane w linii komendy s dost pne wewn trz skryptu jako zmienne powłoki
$1
,
$2
, ... itd. U ycie wewn trz skryptu komendy
shift
spowoduje przesuni cie o jedn pozycj , tj.
$1
b dzie drugim argumentem z linii komendy,
$2
-
trzecim itd.
Programista tworz cy skrypt mo e narzuci powłok , która ma wykona skrypt. Winien w tym celu
poda w pierwszej linii nazw tej powłoki (pełn cie k dost pu) poprzedzona znakami
"magicznymi"
#!
, np.:
#!/bin/ksh
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
14
P
RZYKŁAD
8.1
#!/bin/bash
Zapis ten oznacza to, e do przetworzenie skryptu zostanie u yta powłoka bash.
Przykładowy skrypt mo e wygl da nast puj co :
#!/bin/bash
# to jest tylko komentarz
echo 'skrypt wyswietla aktualny katalog roboczy'
echo -e "biezacy katalog :\n\a`pwd`"
#!/bin/bash
echo "informacje o uruchomionym skrypcie"
echo "nazwa skryptu : $0"
echo "ilosc parametrow : $#"
echo "pierwszy parametr to : $1"
echo "drugi parametr to : $2"
echo -e "zestawienie wszytkich parametrow :\n$*"
9. Konfiguracja powłoki
Niektóre aspekty sposobu działania powłoki mo na zmienia za pomoc tzw. przeł czników
powłoki. Przeł czniki takie s ustawiane za pomoc komendy
set +o
opcja
set -o
opcja
(znak
+
oznacza wył czenie przeł cznika opcja, znak
-
jego wł czenie). Liczba i znaczenie
przeł czników s zale ne od powłoki. Wa niejsze przeł czniki to:
allexport
: automatyczne eksportowanie zmiennych powłoki
ignoreeof
: ignorowanie Ctrl-D (do zako czenia pracy konieczna jest komenda
exit
)
noexec
: sprawdzana jest poprawno syntaktyczna komend (bez ich wykonania)
noglob
: powłoka nie wykonuje generacji nazw plików
nounset
: u ycie niezdefiniowanej zmiennej powłoki jest traktowane jako bł d
monitor
: pozwala na u ycie komend sterowania zadaniami
W powłoce Bourne'a (sh) komenda set akceptuje jedynie jednoznakowe kody przeł czników (por.
man pages).
Administrator systemu b d u ytkownik mo e utworzy skrypty startowe, tj. skrypty zawieraj ce
komendy, które maja by automatycznie wykonane po zalogowaniu si u ytkownika (rozpocz ciu
pracy powłoki). Skrypty takie maj ustalone w danej powłoce nazwy. Poni ej wymieniono pliki,
które s wykonywane po zalogowaniu przez powłoki Bourne'a, Korna i
zsh
.
Powłoka Bourne'a (
sh)
/etc/profile
$HOME/.profile
S
S
Y
Y
S
S
T
T
E
E
M
M
Y
Y
O
O
P
P
E
E
R
R
A
A
C
C
Y
Y
J
J
N
N
E
E
–
Laboratorium nr 4
E & MN © 2004
15
Powłoka Korna: (
csh)
/etc/profile
$HOME/.profile
$ENV
Powłoka
zsh
:
/etc/zprofile
$HOME/.zprofile
$HOME/.zshenv
$HOME/.zshrc
$HOME/.zlogin
Pliki znajduj ce si w katalogu
/etc
s tworzone przez administratora i zwykły u ytkownik nie ma
na nie wpływu. Zawieraj one zwykle komendy, które musz by wykonane podczas logowania si
ka dego u ytkownika, takie jak np. wy wietlenie
motd
, ustawienie cie ki systemowej czy
sprawdzenie poczty. Pozostałe skrypty s tworzone przez u ytkownika w jego prywatnym katalogu
i z reguły ustawiaj parametry powłoki odnosz ce si do tego u ytkownika, np. rodzaj terminala,
prywatne katalogi w cie ce dost pu, nazwa u ywanego edytora ASCII, aliasy itp. Pliki
$HOME/.profile
(
$HOME/.zprofile
,
$HOME/.zlogin
) wykonywane s (podobnie jak pliki z
katalogu
/etc
) tylko przez powłok loginow , pliki wskazywane przez zmienn powłoki
ENV
(lub
plik
$HOME/.zshenv
w przypadku powłoki
zsh
) - je li taka zmienna została zdefiniowana przez
u ytkownika - s wykonywane przez ka d nowo uruchamian przez u ytkownika powłok .
10. Edycja linii komendy
Przy wprowadzaniu polece z linii komendy cz sto zachodzi potrzeba wprowadzenia zmian i
poprawek. Niestety, sposób edycji linii komendy jest ro ny w ró nych powłokach. Najmniejsze
mo liwo ci w tym wzgl dzie ma powłoka Bourne'a, gdzie mo liwo ci edycji ograniczaj si do
skasowania kilku ostatnio wprowadzonych znaków lub całej linii, i ponownego wprowadzenie na to
miejsce poprawionego tekstu.
Powłoki Korna i
zsh
pozwalaj na edycj linii komendy w podobny sposób, jak to si robi w
edytorach
vi
lub
emacs
. U ytkownik winien przypisa zmiennej powłoki EDITOR warto
odpowiadaj c preferowanemu edytorowi (tj.
EDITOR=vi
lub
EDITOR=emacs
). Od tego momentu
u ytkownik mo e u ywa polece odpowiedniego edytora do wprowadzania zmian w linii
komendy. Mo liwe jest tak e:
•
przywoływanie poprzednio wydanych polece ,
•
automatyczne uzupełnianie przez powłok nazwy pliku lub katalogu po napisaniu przez
u ytkownika kilku pierwszych znaków nazwy tego pliku/katalogu (je li znaki te pozwalaj
w sposób jednoznaczny okre li , o jaki plik chodzi).
Jedna z bardziej cenionych zalet powłoki
zsh
jest mo liwo manipulacji kursorem w obr bie
edytowanej linii komendy za pomoc klawiszy kursora, w sposób podobny do edytora linii
komendy z niektórych wersji systemu MS-DOS.