Powłoka systemu UNIX

background image

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

background image

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

}

background image

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

MAIL

: 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 ...

background image

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

background image

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

-

.

background image

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).

background image

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

background image

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

.

background image

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

background image

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:

background image

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:

background image

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:

background image

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

background image

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

background image

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.


Wyszukiwarka

Podobne podstrony:
Powstanie systemu Unix
Egzamin, H. System Unix, H
Lab 01 Wprowadzenie do systemu UNIX
Cechy systemu Unix Linux
Systemy(Unix) wyklad
Lab 01 Wprowadzenie do systemu UNIX
Zestaw H System Unix (2)
Systemy(Unix) wykład
Systemy(Unix) wykład
11 Skrypt,?SH, Powłoka systemowa, Słowa zastrzeżone
Lab 01 Wprowadzenie do systemu UNIX
2006 10 Skrypty powłoki w systemie Linux [Poczatkujacy]
Powstanie systemu Unix
Skrypty powloki systemu Linux Receptury
Skrypty powloki systemu Linux Receptury sposyl
Skrypty powloki systemu Linux Receptury 2

więcej podobnych podstron