sop 2009 lab07

background image

Uniwersytet w Białymstoku

Wydział Matematyki i Informatyki

Instytut Informatyki

Materiały bazowe do zajęć z przedmiotu:

Systemy operacyjne

Laboratorium nr 07

Temat:

Argumenty wywołania, interakcja skryptów, instrukcje warunkowe if-then-else

mgr Adam Bonda

Białystok 2008

background image

Cel laboratorium: Zapoznanie si

ę

z budow

ą

skryptów powłoki

bash

. Okre

ś

lanie

interpretera składni skryptu i cel jego u

ż

ycia. Poznanie kodów wyj

ś

cia zwracanych

przez polecenia, oraz tworzonych argumentów wywołania w tym zmiennych
specjalnych. Komenda strukturalna konstrukcji warunkowej

if-then-else

z

wykorzystaniem polecenia

test

i interakcja z u

ż

ytkownikiem.

Operacje na potokach i przekierowania wej

ś

cia-wyj

ś

cia w poł

ą

czeniu z ró

ż

nymi

poleceniami daj

ą

du

ż

e mo

ż

liwo

ś

ci. Nie s

ą

on jednak zbyt elastyczne, by tworzy

ć

zaawansowane bloki instrukcji budowane w oparciu o małe fragmenty, które
przedstawione były do tej pory w ramach zaj

ę

ciach laboratoryjnych. Aby w obr

ę

bie

jednego bloku instrukcji poł

ą

czy

ć

funkcjonalno

ść

i wzajemn

ą

interakcje wielu polece

ń

nale

ż

y umie

ś

ci

ć

to wszystko w skrypcie.

Ogólne zało

ż

enia stosowania skryptów s

ą

zbli

ż

one do plików wsadowych znanych w

innych

ś

rodowiskach. Maj

ą

one za zadanie kontrolowanie działanie programów. Ze

wzgl

ę

du jednak na mo

ż

liwo

ść

zastosowania zmiennych, instrukcji warunkowych, p

ę

tli, jak i

wielu innych składników daj

ą

du

ż

o wi

ę

ksze mo

ż

liwo

ś

ci np.: zapewniaj

ą

bezpo

ś

redni

ą

komunikacj

ę

z j

ą

drem systemowym przy u

ż

yciu funkcji systemowych.

Systemy UNIX-owe cechuje mnogo

ść

wyst

ę

powania j

ę

zyków skryptowych. Ka

ż

da z

powłok (

bash, sh, tcsh, ksh

) zapewnia tak

ą

mo

ż

liwo

ść

, nie wspominaj

ą

c ju

ż

o

wyspecjalizowanych j

ę

zykach skryptowych jak

perl, tcl/tk, pyhton,

czy

php

.

Skrypt jest plikiem tekstowym zawieraj

ą

cym polecenia, które wykonywane s

ą

podczas

jego pracy. Jego działanie mo

ż

e by

ć

zbli

ż

one do działania programu z t

ą

jednak ró

ż

nic

ą

,

ż

e skryptu nie poddaje si

ę

kompilacji, a zawarte w nim instrukcje wykonywane s

ą

linia po

linii (chyba,

ż

e w wyniku zastosowania odpowiedniej składni interpreter przeskakuje do

wskazanych cz

ęś

ci skryptu).

Rozpoczynaj

ą

c pisanie skryptu, dobrze jest poinformowa

ć

powłok

ę

, jaki program

zinterpretuje nasz kod. Zastosowanie sekwencji

#!program

, jako pierwszej linii, okre

ś

la

wła

ś

nie ten wybór. Wprawdzie znak

#

oznacza komentarz, ale zastosowany w powy

ż

szej

konstrukcji nie wpływa na zignorowanie tej linii przez interpreter, a powoduje u

ż

ycie

programu:

program

do wykonania skryptu.

Tak wi

ę

c je

ś

li u

ż

ywanym do interpretacji programem b

ę

dzie np.:

bash

, to pierwsza linia

skryptu powinna by

ć

postaci:

#!/bin/bash

.

Jest to o tyle istotne,

ż

e czasem zachodzi potrzeba przekazania interpreterowi

dodatkowego parametru. Na przykład wywołanie

bash'a

z parametrem

-x

spowoduje

wy

ś

wietlanie ka

ż

dej linii skryptu w miar

ę

jego wykonywania.

Pierwszy skrypt

Pierwszy skrypt zwróci ogólnie znan

ą

fraz

ę

: „Hello World!”

Tworzymy plik o nazwie

skrypt01.sh

(np. edytorem

vi

, lub

mcedit

) i umieszczamy

w nim:

cat skrypt01.sh
#!/bin/bash
echo "Hello World!"

Rozszerzenie

.sh

jest standardowym u

ż

ywanym dla skryptów pisanych w

bash'u

. Dla tak

prostego skryptu w którym nie wykorzystuje si

ę

ani tablic, ani funkcji, ani nawet operacji

arytmetycznych, mo

ż

liwe jest wskazanie programu

sh

zamiast

bash

do wykonanie tego

zestawu instrukcji. Ze wzgl

ę

du jednak na to,

ż

e

bash

jest rozszerzeniem powłoki

sh

background image

wszystko co „umie” zinterpretowa

ć

sh

, zostanie równie poprawnie zinterpretowane przez

bash'a

.

Nale

ż

y pami

ę

ta

ć

,

ż

e aby mo

ż

liwym było uruchomienie (wykonanie) pliku, musi on mie

ć

odpowiednie prawa. Ponadto uruchomienie skryptu jest to

ż

same z wywołaniem polecenia.

Aby System „znał” uruchamiane polecenia i mógł je wywoła

ć

, musz

ą

one znajdowa

ć

si

ę

w

jednej ze znanych mu lokalizacji. Zmienna

ś

rodowiskow

ą

PATH

pełni wła

ś

nie t

ą

funkcj

ę

.

Dlatego wywołanie skryptu b

ę

dzie mo

ż

liwe, gdy jego nazwa b

ę

dzie znana systemowi, a

spełnione to b

ę

dzie w trzech przypadkach:

gdy podamy bezwzgl

ę

dn

ą

ś

cie

ż

k

ę

i nazw

ę

skryptu (do

ść

uci

ąż

liwa metoda)

dopiszemy lokalizacj

ę

skryptu do zmiennej

PATH

(je

ż

eli umieszczamy pliki w wielu

katalogach to b

ę

dzie to równie

ż

czasochłonne rozwi

ą

zanie)

skorzystamy z symbolu katalogu bie

żą

cego

ś

ci

ś

le wi

ążą

cego nazw

ę

wywoływanego skryptu

Argumenty skryptów

Podczas uruchamiania skryptów powłoki, zmiennym o nazwach

[0-9]

nadawane s

ą

warto

ś

ci odpowiadaj

ą

ce kolejnym argumentom z jakimi wywołany został skrypt.

Warto zwróci

ć

fakt na zmienne specjalne powłoki

bash

przedstawione w tabeli poni

ż

ej:

Zmienne specjalne powłoki

bash

#

Przechowuje liczb

ę

parametrów przekazanych podczas wywołania skryptu.

@

Przechowuje wszystkie parametry przekazanych podczas wywołania skryptu (je

ż

eli

argumenty zawieraj

ą

spacje nale

ż

y skorzysta

ć

ze znaków podwójnego cytowania.

?

Przechowuje kod wyj

ś

cia zwrócony przez ostatni zako

ń

czony proces pierwszego

planu.

!

Przechowuje kod wyj

ś

cia zwrócony przez ostatni zako

ń

czony proces tła.

$

Przechowuje numer procesu powłoki.

0

Zwraca nazw

ę

wywoływanego polecenia.

*

Przechowuje wszystkie parametry przekazanych podczas wywołania skryptu. Je

ż

eli

zmienna otoczona zostanie podwójnymi znakami cytowania to pomi

ę

dzy argumenty

wstawiony zostanie znak zdefiniowany przez zmienn

ą

ś

rodowiskow

ą

IFS.

Polecenie

shift

[n]

słu

ż

y do usuwania argumentów według zadanej warto

ś

ci

[n]

.

$ cat skrypt02.sh
#!/bin/bash
echo "uruchomiłes '${0##*/}'"
echo "skrypt wywołano z $# argumentami"
echo "ich wartości to: '$1', '$2', '$3', '$4', '$5'"
echo "polecenie shift usunie teraz 3 pierwsze zmienne"
echo shift 3
shift 3
echo "skrypt wywołano z '$#' argumentami"
echo "ich wartości to: '$1', '$2', '$3', '$4', '$5'"

A oto przykład działania skryptu korzystaj

ą

cego z argumentów wywołania:

$ ./1.sh 1 2 3 "A to jest czwarta" 5

background image

uruchomiłes '1.sh'
skrypt wywołano z 5 argumentami
ich wartości to: '1', '2', '3', 'A to jest czwarta', '5'
polecenie shift usunie teraz 3 pierwsze zmienne
shift 3
skrypt wywołano z '2' argumentami
ich wartości to: 'A to jest czwarta', '5', '', '', ''

Interakcja

Niekiedy w trakcie wykonywania skryptu istnieje potrzeba pobrania dodatkowych
informacji od u

ż

ytkownika (ze standardowego wej

ś

cia), np.: podczas instalacji

oprogramowania skrypt mo

ż

e zapyta

ć

gdzie umie

ś

ci

ć

pliki programu. Słu

ż

y do tego

polecenie

read

.

Wywołane bez argumentu polecenie

read

wczytuje ze standardowego wej

ś

cia jedn

ą

lini

ę

i

przypisuje to zmiennej

REPLY

.

$ cat skrypt03.sh
#!/bin/bash
read
echo '$REPLY'

Je

ś

li podamy argument

read

, to potraktowane zostanie to jako nazwa zmiennej i to jej

zostanie przypisana warto

ść

.

$ cat skrypt04.sh
#!/bin/bash
read var1
echo '$var1'

Je

ś

li podanych zostanie wi

ę

cej argumentów (odseparowanych spacjami) ni

ż

oczekuje

tego polecenie

read

, to kolejne słowa przypisane zostan

ą

odpowiednim zmiennym, a

ostatniej zmiennej przypisana zostanie reszta warto

ś

ci

$ cat skrypt05.sh
#!/bin/bash
read var1 var var3 var4
echo '$var1', '$var', '$var3', '$var4'

Kody bł

ę

dów zgłaszanych przez Linux'a przy wyj

ś

ciu z polecenia (zmienna $?

przechowuje warto

ść

wyj

ś

cia z ostatnio wywołanej komendy)

Kod błedu

opis

0

Komenda zako

ń

czona sukcesem

1

Nieznany bł

ą

d zako

ń

czenia polecenia

2

Niewła

ś

ciwie u

ż

yte polecenie

126

Komendy nie mo

ż

na wykona

ć

127

Komenda nieznana

128

Nieprawidłowy argument wyj

ś

cia

128+x

Powa

ż

ny bł

ą

d pochodz

ą

cy z sygnału x

130

Komenda przerwana przy u

ż

yciu CTRL+C

255

Kod wyj

ś

cia spoza zakresu

background image

Komendy strukturalne

Wiele problemów, z jakimi spotyka si

ę

pisz

ą

cy skrypty wi

ąż

e si

ę

zastosowaniem w

nich pewnej logiki kontroluj

ą

cej działanie polece

ń

z poziomu skryptu. Oznacza to,

ż

e powłoka wykonuje okre

ś

lone polecenia przy zadanych warunkach, b

ą

d

ź

jest w

stanie wykona

ć

zupełnie inne instrukcje, je

ś

li dane warunki nie s

ą

spełnione.

Istnieje cał

ą

klasa polece

ń

pozwalaj

ą

cych skryptowi do pomijania, lub zap

ę

tlania

komend w oparciu sprawdzan

ą

warto

ść

zmiennych, czy w zale

ż

no

ść

od wyników

innych programów.
Polecenia te okre

ś

lane s

ą

mianem komend komend strukturalnych.

Instrukcje warunkowe

if-then

Najbardziej powszechn

ą

komend

ą

strukturaln

ą

jest konstrukcja

if-then

. Format the

polecenia jest nast

ę

puj

ą

cy:

if komenda
then
komendy
fi

Konstrukcja

if

wywołuje polecenie zdefiniowane po niej. Je

ś

li kod wyj

ś

cia tego polecenia

(patrz tabela wy

ż

ej) jest równy zero (polecenie zako

ń

czone sukcesem – true) komenda,

b

ą

d

ź

ci

ą

g komend zawartych w sekcji

then

jest wykonywany. Je

ż

eli natomiast kod wyj

ś

cia

polecenia jest ró

ż

ny od zera, wtedy

ż

adna z komend nie zostanie wykonana, a powłoka

bash

przejdzie do wykonywania kolejnego polecenia skryptu.

$ cat if_skrypt01.sh
#!/bin/bash
# testowanie konstrukcji if
if date
then
echo "działa!!!"
fi

Shell wywołuje polecenie

date

okre

ś

lone po

if

. Komenda

date

zwraca aktualn

ą

dat

ę

,

ko

ń

czy si

ę

sukcesem, co warunkuje wykonaniem konstrukcji

then

, a wi

ę

c wypisaniem

ci

ą

gu tekstowego.

$ cat if_skrypt02.sh
#!/bin/bash
# testowanie nieistniejącego polecenia
if blablabla
then
echo "polecenie istnieje i zwrócona została wartość true"
fi
echo "konstrukcja if zakończyła działanie, cos jest nie tak z poleceniem"
$ ./if_skrypt02.sh
./if_skrypt02.sh: line 3: blablabla: command not found
konstrukcja if zakończyła działanie, cos jest nie tak z poleceniem
$

Wywołanie nieistniej

ą

cej komendy zwraca warto

ść

kodu wywołania ró

ż

n

ą

od zera.

Warunek nie jest spełniony, a blok komend sekcji

then

nie jest wykonywany. Powłoka

wychodzi ze struktury warunkowej

if

i wykonuje kolejn

ą

cz

ęść

kodu.

background image

Instrukcje warunkowe

if-then-else

Konstrukcja

if-then

u

ż

ywa si

ę

uwzgl

ę

dniaj

ą

c tylko jedn

ą

opcje – true, wszystkie

pozostałe przypadki nie oznaczaj

ą

true i nie s

ą

interesuj

ą

ce z punktu widzenia logiki

problemu. Je

ż

eli nie spełniony jest warunek

if

powłoka pomija sekcj

ę

then

i przechodzi

do dalszej cz

ęś

ci skryptu. Tutaj wła

ś

nie pojawia si

ę

odpowiednie miejsce dla konstrukcji

i

f-then-else

, poniewa

ż

mo

ż

na za

żą

da

ć

wykonania alternatywnego zestawu instrukcji,

je

ś

li warunek if nie spełnił oczekiwa

ń

skryptu.

Konstrukcja składni

if-then-else

jest nast

ę

puj

ą

ca:

if komenda
then
komendy
else
komendy
fi

Je

ż

eli komenda w linii z

if

zwróci warto

ść

kodu wyj

ś

cia równ

ą

zero, to podobnie jak w

przypadku wcze

ś

niejszym, wykonany zostanie zestaw komend sekcji

then

, w pozostałych

przypadkach wykonane zostan

ą

polecenia zawarte w sekcji

else

.

Instrukcje warunkowe

elif

Niekiedy nale

ż

y sprawdzi

ć

i wykona

ć

odpowiednie działanie dla kilku warto

ś

ci. Dlatego

zamiast stosowania rozł

ą

cznej instrukcji

if-then

stosuje si

ę

alternatywn

ą

wersj

ę

sekcji

else

,

elif

.

Konstrukcja

elif

kontynuuje sekcje

else

z kolejnym warunkiem

if-then

:

if komenda1
then
komendy
elif komenda2
then
więcej komend
fi

Podobnie do konstrukcji

if

,

elif

umo

ż

liwia wykonanie kolejnej komendy. Je

ż

eli kod

wyj

ś

cia z

elif

jest równy zero, powłoka

bash

wykona komendy z drugiej sekcji

then

.

Mo

ż

liwe jest wi

ę

c ł

ą

czenie konstrukcji elif i tworzenie du

ż

ych bloków

if-then-elif

:

if komenda1
then
zestaw_komend1
elif komenda2
then
zestaw_komend2
elif komenda3
then
zestaw_komend3
elif komenda4
then
zestaw_komend4
fi

Ka

ż

dy zestaw komend jest wykonywane, zale

ż

nie od tego, która komenda zwróci warto

ść

zero kodu wyj

ś

cia. Nale

ż

y te

ż

pami

ę

ta

ć

, ze powłoka

bash

wykonuje instrukcje warunkowe

w ustalonym porz

ą

dku i gdy tylko który

ś

z warunków zwróci warto

ść

true, sekcja

then

zostawanie wykonana.

background image

Komenda

test

cd.

Na poprzednich zaj

ę

ciach omówione zostało działanie komendy

test

. Wiemy ju

ż

,

ż

e

zarówno konstrukcja

if-then

, jak i

test

maj

ą

podobne działanie. Zasadnicza ró

ż

nica

pomi

ę

dzy nimi jest taka,

ż

e

if

jest wbudowan

ą

funkcj

ą

basha

, natomiast

test

jest

zewn

ę

trzn

ą

aplikacj

ą

. Ponadto konstrukcji

if-then

u

ż

ywa si

ę

tylko do sprawdzania

warto

ś

ci kodów wyj

ś

cia co znacznie zaw

ęż

a działanie. Jednak w poł

ą

czeniu z programem

test

, jej zastosowanie jest du

ż

o szersze.

Polecenie

test

u

ż

yte w konstrukcji

if-then

umo

ż

liwia sprawdzanie pod wieloma

wzgl

ę

dami ró

ż

nych warunków. Je

ż

eli polecenie

test

zwraca warto

ść

true, to jest to

równoznaczne z otrzymaniem zera kody wyj

ś

cia aplikacji.

if test warunki
then
komendy
fi

lub

if [ warunki ]
then
komendy
fi

Jak ju

ż

wiadomo istniej

ą

trzy klasy na których mo

ż

na zastosowa

ć

działanie polecenia test:

sprawdzanie plików

porównania numeryczne

sprawdzanie ła

ń

cuchów znakowych

Zadanie 1
Napisa

ć

skrypt pytaj

ą

cy u

ż

ytkownika o imi

ę

, nazwisko, adres. Skrypt zwraca

wprowadzone warto

ś

ci w opisanej formie (np.: imi

ę

i nazwisko: Ja

ś

Fasola itd.) i zapisuje

je do pliku.

Zadanie 2
Przepisa

ć

skrypt z zadania 1 tak, aby dane wprowadzane były jako argumenty wywołania.

Zadanie 3
Napisa

ć

skrypt który wy

ś

wietli wszystkie pliki ko

ń

cz

ą

ce si

ę

na

.sh

lub

.bash

z katalogu

domowego u

ż

ytkownika (o ile on w ogóle istnieje):

a) podanego jako argument pliku
b) zadeklarowanego przy u

ż

yciu zmiennej

Je

ś

li istnieje taka potrzeba stosowa

ć

zmienne

ś

rodowiskowe. Je

ż

eli podany u

ż

ytkownik

nie istnieje powinna by

ć

zwrócona stosowna informacja.

Zadanie 4
Napisa

ć

skrypt w którym zadeklarowane zostan

ą

warto

ś

ci dwóch zmiennych. W

zale

ż

no

ś

ci od porównania ich warto

ś

ci skrypt ma zwróci

ć

odpowiedni komunikat o

równo

ś

ci, mniejszo

ś

ci, wi

ę

kszo

ś

ci wzgl

ę

dnej zmiennych.

Zadanie 5
Napisa

ć

skrypt w którym zadeklarowane zostan

ą

dwie zmienne ła

ń

cuchowe. Porówna

ć

ła

ń

cuchy znaków i zwróci

ć

odpowiedni komunikat.

background image

Zadanie 6
Zmodyfikowa

ć

skrypt z zadania 5 w ten sposób, aby u

ż

ytkownik był pytany o

wprowadzane ła

ń

cuchy. Działanie skryptu takie samo jak w zadaniu 5. Uwzgl

ę

dni

ć

mo

ż

liwo

ść

wprowadzenia pustego ła

ń

cuchu i wyprowadzenie odpowiedniego komunikatu.

Zadanie 7
Napisa

ć

skrypt który sprawdzi istnienie katalogu domowego u

ż

ytkownika uruchamiaj

ą

cego

skrypt, je

ś

li katalog nie istnieje to musi zosta

ć

zwrócona odpowiednia informacja, a

działanie skryptu przerwane. W kolejnym kroku skrypt sprawdza istnienie pliku

plik_test

,

je

ż

eli plik nie istnieje, to jest tworzony i wypisywany jest odpowiedni komunikat o jego

utworzeniu. Je

ż

eli plik

plik_test

istniał to sprawdzana jest mo

ż

liwo

ść

jego zapisu. Je

ż

eli

plik nie posiada odpowiednich praw to zwracany jest stosowny komunikat. W kolejnym
kroku skrypt pyta o imi

ę

i nazwisko u

ż

ytkownika, je

ż

eli która

ś

z warto

ś

ci nie została

podana to zwracany jest odpowiednia informacja. Na ko

ń

cu skrypt zapisuje do pliku

plik_test

aktualn

ą

godzin

ę

, oraz imi

ę

i nazwisko.


Wyszukiwarka

Podobne podstrony:
sop-2009-lab06
sop-2009-lab08
sop-2009-lab04
sop-2009-lab01
sop-2009-lab05
canada unit sop 2009
sop 2009 lab04
sop 2009 lab01
sop 2009 lab08
sop 2009 lab03
sop 2009 lab02
SYSTEM OCHRON PRAWNEJ Wykla 17[1].10.2009, Dokumenty STUDIA SKANY TEXT TESTY, ADMINISTRACJA UNIWEREK
SOP UE-II 19[1].12.2009, Dokumenty STUDIA SKANY TEXT TESTY, ADMINISTRACJA UNIWEREK WROCŁAW MAGISTER,
SOP UE-I 05[1].12.2009 SW, Dokumenty STUDIA SKANY TEXT TESTY, ADMINISTRACJA UNIWEREK WROCŁAW MAGISTE
SYSTEM OCHRON PRAWNEJ Wykla 17[1].10.2009, Dokumenty STUDIA SKANY TEXT TESTY, ADMINISTRACJA UNIWEREK

więcej podobnych podstron