SYSTEMY OPERACYJNE
Sprawozdanie z ćwiczeń laboratoryjnych nr 5, 6
Prowadzący: dr hab. inż. Antoni Donigiewicz
Wykonał: Szymon Puacz I6Y2S1
Data: 07.04.2008, 14.04.2008
Ćw.1
Napisz polecenie, które wyświetli, w ilu plikach znajdujących się w twoim katalogu domowym, których nazwa kończy się na `la', znajduje się wiersz `ala'.
rozw.:
grep -l `ala' *la |wc -l
Ćw. 2
Napisz polecenie, ile jest wierszy postaci `123' w plikach o nazwach rozpoczynających się na `numery'.
rozw.:
grep -n `123' numery* |wc -l
Ćwiczenia dotyczyły skryptów w systemie UNIX. Skrypt tworzymy wprowadzając kod do pliku (np. poprzez cat > nazwa_pliku).
Pierwszy skrypt:
echo ''Argument z dolar1”
echo ''$1”
echo ''Argument z dolar3”
echo ''$3”
echo ''Nazwa skryptu: $0”
echo ''Wszystkie argumenty: $@”
Skrypt wywołuje się za pomocą komendy:
./nazwa 77 ala ola
Jednak po wywołaniu otrzymuję komunikat: ''Access denied”, co oznacza, że użytkownik nie ma prawa do wykonywania nowoutworzonego pliku. Aby to zmienić, należy dodać nowe prawo dostępu: chmod u+x nazwa.
Działanie skryptu:
Uruchamiam skrypt razem z argumentami: „77 ala ola”. Po uruchomieniu programu zostaje wyświetlone:
Argument z dolar1
77
Argument z dolar3
ala
Nazwa skryptu: ./nazwa
Wszystkie argumenty: 77 ala ola
$1 w skrypcie oznacza, że wywołujemy pierwszy argument, itd., każdy następny numer wywołuje następny argument. $0 wywołuje jako argument nazwę pliku.
Instrukcje warunkowe
Pierwszy typ instrukcji warunkowej ma postać:
if test polecenia
then
…. polecenia …
fi
To znaczy, że jeśli test jest spełniony, polecenia po then zostaną wykonane. fi oznacza koniec instrukcji warunkowej.
Przykład:
echo ''Instrukcja warunkowa typ1”
echo ''Podaj liczbe”
read a1
if test $a1 -gt 20
then
echo ''liczba $a1 jest wieksza niz 20”
fi
echo ''KONIEC”
Po uruchomieniu podajemy jako argument liczbę i program sprawdza w instrukcji warunkowej, czy jest ona większa od 20, jeśli tak, wypisuje dalszą część tekstu.
Drugi typ:
if test polecenia
then
…. polecenia ….
else
…. polecenia…
fi
Traktujemy ten typ jako zwykłą insrukcję if - else. Jeśli pierwszy warunek nie jest spełniony, wykonuje się warunek poprzedzony else .
Przykład:
echo ''Instrukcja warunkowa typ2”
echo ''Podaj liczbe”
read a1
if test $a1 -gt 20
then
echo ''liczba $a1 jest wieksza niz 20”
else
echo ''liczba $a1 jest mniejsza lub rowna 20”
fi
echo ''KONIEC”
Program podobny do poprzedniego, z tym, że jeśli warunek nie jest spełniony, dostaniemy komunikat „Liczba jest mniejsza lub równa”.
Trzeci typ:
if test polecenia
then
…. Polecenie1….
elif test
then
…..polecenie2…..
else
……polecenie3…..
fi
Kolejny typ wyrażenia warunkowego, tylko, że w tym można podać kilka warunków. elif to odpowiednik else if w języku C.
Przykład:
echo ''Instrukcja warunkowa typ3”
echo ''Podaj liczbe”
read a1
if test $a1 -gt 20
then
echo ''liczba $a1 jest wieksza niz 20”
elif
echo ''liczba $a1 jest mniejsza od 20”
else
echo ''liczba $a1 jest rowna 20”
fi
echo ''KONIEC”
Rozważamy ten sam typ programu, tym razem sprawdza on dodatkowy warunek, tzn. czy liczba jest mniejsza (-lt 20) od 20.
Pętle
Typ1:
for nazwa in wyrażenie
do
…..polecenia…..
done
Przykład:
echo ''Wypisywanie argumentow w petli”
for ZM in $@
do
echo ''wartosc arg: $ZM”
done
uruchomienie skryptu: ./nazwa_pliku ola 7 22 44
Działanie:
Wypisywanie argumentow w petli
Wartość arg: ola
Wartość arg: 7
Wartość arg: 22
Wartość arg: 44
Program wypisuje wszystkie wartości, nazwy, które są podawane przy uruchomieniu jako argumenty. done oznacza koniec pętli.
Typ2:
for (wyrazenie1; wyrazenie2; wyrazenie3)
do
…….polecenia……..
done
Ta wersja pętli najbardziej przypomina pętlę `for', którą znamy z języka C. Polecenia są wykonywane dla wyrażeń warunkowych przy `for'.
Ćw. 3
Napisać skrypt, który wyświetli, ile razy w skryptach wystąpiło słowo kluczowe `echo'.
Rozw.:
echo ''Ilosc wystapien slowa echo:”
grep -n `echo' * |wc -l
LAB.6
Ćw. 1
Mamy dane pliki o nazwach:
Skrypt1.skr
Skrypt2.skr
Skrypt3.skr
Skrypt4.skr
Napisać skrypt, który zmieni nazwy plików w ten sposób, że nie będą miały one rozszerzenia.
Rozw.:
rename .skr `' skrypt*.skr
Zmieniam nazwy plików tych plików, których nazwa rozpoczyna się od skrypt.
pętla while
while warunek
do
……instrukcje……..
done
Przykład
zm = '' ''
while [''$zm'' != koniec]
do
echo -n ''Wpisz slowo `koniec' aby zakończyć:''
read zm
echo ''Wpisales `$zm' ''
done
Program wykonuje się w pętli, dopóki nie zostanie wprowadzony tekst `koniec'.
Instrukcja wyboru `case'
Case ZMIENNA in
wartość1)
polecenie1
polecenie2
;;
wartość2)
polecenie3
polecenie4
;;
*)
polecenie5
polecenie6
;;
esac
Instrukcje `case' dają wygodny sposób dokonywania rozgałęzienia na wiele ścieżek przy porównaniu jednego wprowadzanego wzorca z wieloma alternatywami.
Wnioski
Pisanie programów za pomocą skryptów w systemie UNIX jest bardzo podobne do pisania w języku C. Skrypt można zapisać w pliku i otworzyć go później jako program. Wymaga to jednak zmiany prawa dostępu do pliku, gdyż domyślnie przy tworzeniu pliku użytkownik nie ma prawa execute.
6