sop 2009 lab09


Uniwersytet w Białymstoku
Wydział Matematyki i Informatyki
Instytut Informatyki
Materiały bazowe do zajęć z przedmiotu:
Systemy operacyjne
Laboratorium nr 09
Temat:
funkcje, break i continue
mgr Adam Bonda
Białystok 2008
Cel laboratorium: Zapoznanie się z metodami sterowania działania pętli, sposobami
definiowania i wywoływania funkcji.
polecenia break i continue
Poleceń break i continue u\ywa się głównie w pętlach: for, while, until. U\ycie polecenia
break wewnątrz pętli przerywa jej wykonanie i powoduje wykonywanie pierwszego wiersza
znajdującego się bezpośrednio po pętli
Przykład:
for i
do
case $i in
:) break;;
*) echo $i;;
esac
done
Skrypt wyprowadza argumenty wywołania do momentu natrafienia na znak dwukropka,
kiedy to działanie pętli jest przerywane.
Antagonistycznym poleceniem do break jest continue. Wymusza ono przejście do kolejnej
iteracji pętli.
Przykład:
for i
do
case $i in
[A-Za-z]*) echo $i;;
*) continue;;
esac
done
Tym razem procedura wyprowadza tylko te nazwy parametrów, które zaczynają się od
litery. Zadaniem polecenia continue więc uruchomienie pętli ponownie, nawet jeśli jakiś z
podanych argumentów nie jest literą. W takim przypadku zostanie on zwyczajnie pominięty
i wyświetlony kolejny odpowiadający wzorcowi.
Funkcje
Podobnie jak w innych językach funkcje słu\ą do wyodrębnienia fragmentów kodu, które
mo\na pózniej wielokrotnie wykonywać. Funkcję definiuje się poprzez słowo kluczowe
function i nawiasy klamrowe, pomiędzy którymi umieszcza się ciało funkcji.
function nazwa {
komendy
}
Atrybut nazwa definiuje unikatową nazwę funkcji. Nazwa \adnej funkcja definiowanej w
skrypcie nie mo\e się powtarzać. Ciało funkcji stanowić mogą komendy i inne poznane ju\
struktury. Wywołując funkcje, powłoka wykonuje kolejno linie funkcji, jak w przypadku
zwykłego skryptu.
Mo\na te\ definiować funkcję w zbli\ony do innych języków sposób:
nazwa() {
komendy
}
Puste nawiasy występujące bezpośrednio po nazwie funkcji wskazują powłoce, \e
tworzona jest właśnie funkcja.
Przykład:
#!/bin/bash
function funkcja1 {
echo "Testowanie funkcji"
}
i=1
while [ $i -le 3 ]
do
funkcja1
count=$[ $i + 1 ]
done
echo "Tutaj kończy się pętla"
funkcja1
echo "Tutaj kończy się skrypt"
Najpierw definiowana jest funkcja, następnie trzy razy wykonywana jest pętla, w której za
ka\dym razem wywoływana jest funkcja. Podczas działania skryptu wartość funkcji
zwracana jest cztery razy (raz poza pętlą).
Definicja funkcji musi znajdować się przed jej wywołaniem!
' Zwracanie wartości
' Domyślna wartość kodu wyjścia funkcji jest wartością kodu wyjścia ostatniej
wywołanej w funkcji komendy.
Przykład:
#!/bin/bash
funkcja1() {
echo "wyświetlamy informacje o nieistniejącym pliku"
ls -l niema_takiego_pliku
}
echo "sprawdzamy co zwraca funkcja:"
funkcja1
echo "kod wyjścia funkcji: $?"
$ ./skrypt.sh
sprawdzamy co zwraca funkcja:
wyświetlamy informacje o nieistniejącym pliku
ls: niema_takiego_pliku: No such file or directory
kod wyjścia funkcji: 1
$
Nieistniejący plik powoduje, \e ls zwraca kod wyjścia 1. Jednocześnie ls jest ostatnią
komendą funkcji. Funkcja zwraca więc wartość kody wyjścia 1 (false).
Jednak\e, nie mo\na stwierdzić, czy któraś z wcześniejszych komend funkcji zakończyła
się sukcesem, czy nie.
W powy\szym przykładzie wystarczy zmodyfikować strukturę funkcji w następujący
sposób:
funkcja1() {
ls -l niema_takiego_pliku
echo "wyświetlamy informacje o nieistniejącym pliku"
}
śeby przekonać się, \e tym razem zwrócona zostanie wartość kody wyjścia funkcji 0
(true).
' Komenda return
Wbudowana komenda powłoki: return, zapewnia zwrócenie określonej wartości kodu
wyjścia funkcji.
Przykład:
#!/bin/bash
function podw {
read -p "wprowadz wartość: " var
echo "podwajanie wprowadzonej wartości"
return $[ $var * 2 ]
}
podw
echo "wynik działania funkcji $?"
Pobierana jest wartość zmiennej var, po czym funkcja podw podwaja jej wartość.
Komenda return nadaje kod wyjścia odpowiednio do u\ytej formuł, a zmienna specjalna $?
zwraca ostatni kod wyjścia komendy, czyli wartość otrzymana z return.
Uwaga:
ą Pamiętaj, aby odczytać wartość komendy return bezpośrednio po wykonaniu
komendy (inaczej wartość kodu wyjścia mo\e zostać utracona/nadpisana przez kod
wyjścia innej komendy)
ą Kody wyjścia przyjmują wartości od 0 do 255.
Zastosowanie komendy return jest więc w miarę  gęsto określone nadaje się on do
zwracania kodów wyjścia. Nie jest narzędziem do przeprowadzania obliczeń. Nie zwraca
równie\ ciągów tekstowych.
' Zwracanie wartości funkcji
Podobnie jak zmiennym przypisuje się wyniki działania komend (zmienna=`komenda`),
wyniki zwracane przez funkcje mogą być równie\ przypisane.
#!/bin/bash
function testowa {
read -p "wprowadz wartość: " var1
echo $var1
}
var2=`testowa`
echo 'wartość zmiennej $var to:' \"$var2\"
' Przekazywanie parametrów funkcjom
Funkcje obsługują standardowe parametry zmiennych środowiskowych do
reprezentowania jakichkolwiek wartości im przekazywanych z linii poleceń, czy skryptu.
Mo\na np. u\yć $1, $2 czy zmiennych specjalnych #$ do przekazania wartości funkcji.
Przykład:
#!/bin/bash
function dodawanie {
if [ $# -eq 0 ] || [ $# -gt 2 ]
then
echo -1
elif [ $# -eq 1 ]
then
echo $[ $1 + $1 ]
else
echo $[ $1 + $2 ]
fi
}
echo -n "Dodajemy 1 do 2: "
wartosc=`dodawanie 1 2`
echo $wartosc
echo -n "Dodajmy teraz 5 do 8: "
wartosc=`dodawanie 5 8`
echo $wartosc
echo -n "Dodajemy tylko jedna wartość 5: "
wartosc=`dodawanie 5`
echo $wartosc
echo -n "Nic nie dodajemy: "
wartosc=`dodawanie`
echo $wartosc
echo -n "Dodajmy trzy liczby 3, 4, 5: "
wartosc=`dodawanie 3 4 5`
echo $wartosc
$ ./skrypt
Dodajemy 1 do 2: 3
Dodajmy teraz 5 do 8: 13
Dodajemy tylko jedna wartość 5: 10
Nic nie dodajemy-1
Dodajmy trzy liczby 3, 4, 5: -1
Zadanie 1. Napisać funkcje zwracającą kwadrat podaje wartości.
a) Wartość podajemy jako argument wywołania skryptu
b) Skrypt sam wywołuje funkcję z argumentem
Zadanie 2.
Napisać skrypt, w którym pętla będzie  odpytywać funkcje sprawdzającą prawa dostępu
do pliku.
Funkcję wywołuje się: nazwa_funkcji plik (w|r|x).
Zadanie 3. Napisać funkcję sumującą elementy tablicy
Zadanie 4. Napisać funkcję podwajającą ka\dy element tablicy
Zadanie 5. Napisać funkcję obliczającą silnię


Wyszukiwarka

Podobne podstrony:
sop 2009 lab04
sop 2009 lab05
sop 2009 lab12
sop 2009 lab10
sop 2009 lab03
sop 2009 lab08
sop 2009 lab01
sop 2009 lab11
sop 2009 lab02
sop 2009 lab06
sop 2009 lab07
2009 2010 rejon
2009 pytania testowe
[W] Badania Operacyjne Zagadnienia transportowe (2009 04 19)
Twilight Saga New Moon 2009 CAM XviD POISON

więcej podobnych podstron