12. Skrypty w Linux - funkcje, instrukcje sterujące i obliczenia arytmetyczne

Podobne dokumenty
Systemy operacyjne 11

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

System operacyjny Linux

Technologie Informacyjne - Linux 3

Systemy operacyjne. Programowanie w shellu: BASH. Wydział Inżynierii Metali i Informatyki Przemysłowej

Skrypty powłoki w systemie Linux

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Programowanie w BASH u Skrypt do ćwiczeń

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Odczyt danych z klawiatury Operatory w Javie

Skrypty BASH a. Systemy Operacyjne 2. Mateusz Hołenko. 4 października 2012

1 Podstawy c++ w pigułce.

Wprowadzenie do programowania w powłoce

Pracownia Komputerowa wykład III

Programowanie skryptów powłoki

Podstawy Programowania Podstawowa składnia języka C++

Podstawy i języki programowania

Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego.

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Interpreter poleceń oraz zmienne środowiskowe

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

Instrukcja SO powłoka BASH i skrypty powłoki Istotne jest zrozumienie działania narzędzia history powłoki BASH. Każde polecenie wprowadzone i

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Pętla for. Wynik działania programu:

1 Podstawy c++ w pigułce.

Środowisko programisty Zestaw 7

Warunki logiczne instrukcja if

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

PODSTAWY INFORMATYKI

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Programowanie w Turbo Pascal

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Podstawy programowania w języku C i C++

Instrukcje sterujące

LibreOffice Calc VBA

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Ćwiczenie 1. Wprowadzenie do programu Octave

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

- wszystkie elementy - wszystkie elementy

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie w języku Python. Grażyna Koba

3. Instrukcje warunkowe

Cw.12 JAVAScript w dokumentach HTML

Języki i paradygmaty programowania

JAVAScript w dokumentach HTML - przypomnienie

Podstawy JavaScript ćwiczenia

Laboratorium Ubuntu Linux.

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Wprowadzenie do Scilab: podstawy języka Scilab

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );

Algorytmika i Programowanie VBA 1 - podstawy

Programowanie komputerowe. Zajęcia 1

K. Konopko; Skrypty powłoki. Skrypty powłoki. dr inż. Krzysztof Konopko

Kurs pisania skryptów w powłoce BASH

Bash - instrukcje warunkowe, pętle i funkcje

Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Bloki anonimowe w PL/SQL

Programowanie strukturalne i obiektowe

Powłoka (shell) Powłoka ksh

1 Przygotował: mgr inż. Maciej Lasota

Warunki i pętle. Instrukcja warunkowa if. Przykład zastosowania.

Program znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy dopóki nam sie nie znudzi.

Zapis algorytmów: schematy blokowe i pseudokod 1

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

MATERIAŁY DO ZAJĘĆ II

Algorytmy i struktury danych

WHILE (wyrażenie) instrukcja;

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

Struktura pliku projektu Console Application

Konstrukcje warunkowe Pętle

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Instrukcja warunkowa i złoŝona.

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Ćwiczenie 1. Wprowadzenie do programu Octave

Ćwiczenie: JavaScript Cookies (3x45 minut)

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Podstawy programowania skrót z wykładów:

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Stuck in the loop. Sterowanie. Marcin Makowski. 29 października Zak lad Chemii Teoretycznej UJ

skrypt powłoki to plik tekstowy, rozpoczynający się sekwencją: pierwsza linia określa powłokę, w której wykonywany jest skrypt; druga to komentarz

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Kiedy i czy konieczne?

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Należy ściągnąć oprogramowanie Apache na platformę

Transkrypt:

12. Skrypty w Linux - funkcje, instrukcje sterujące i obliczenia arytmetyczne 12.1. Funkcje Funkcje są to podprogramy, dzięki czemu często wykorzystywane instrukcje można zgrupować w jeden blok, zamiast pisać je po kilka razy. Aby odwołać się funkcji należy tylko podać jej nazwę. Ogólna składnia funkcji ma postać: function nazwa_funkcji { polecenie1 polecenie2 polecenie3 } function napis { echo "Przyklawy napis" } napis Możliwe jest również umieszczanie funkcji w osobnym pliku. Dzięki temu nasz skrypt będzie bardziej przejrzysty. Należy utworzyć pliki nagłówkowe, których odwołujemy się zgodnie z poniższą składnią:. ~/plik_z_funkcjami nazwa_funkcji Obowiązkowo należy pamiętać o podaniu kropki i spacji przed nazwą pliku nagłówkowego. Zdeniujmy funkcję napis w pliku nagłówkowym funkcje: function napis { echo -e 'Wywolales funkcje z pliku "funkcje".\a' } Aby z tej funkcji skorzystać, należy utworzyć skrypt i umieścić wewnątrz odpowiednie wywołanie funkcji. Zaimplementujemy taki skrypt: echo "Testowanie pliku naglowkowego". funkcje napis 1

Do funkcji można przekazać parametry: nazwa_funkcji parametr1 parametr2 Wewnątrz funkcji są one wiczne jako zmienne $1, $2. 12.2 Instrukcje sterujące Instrukcja warunkowa if Instrukcja if sprawdza czy warunek jest prawdziwy, jeśli tak to wykonane zostanie polecenie lub polecenia znajdujące się po słowie kluczowym. Instrukcja kończy się słowem. if warunek polecenie if [ -e ~/.bashrc ] echo "Masz plik.bashrc" Instrukcja if umożliwia również konanie wyboru dwuwariantowego. Składnia takiej instrukcji przedstawiona jest poniżej: if warunek polecenie1 else polecenie2 if [ -e ~/.bashrc ] echo "Masz plik.bashrc" else echo "Nie masz pliku.bashrc" 2

Możliwe jest również testowanie większej ilości warunków (wybór wielowariantowy). Służy tego słowo kluczowe elif (ang. else if). if warunek1 polecenie1 elif warunek2 polecenie2 if [ -x /opt/kde/bin/startkde ] echo "Masz KDE w katalogu /opt" elif [ -x /usr/bin/startkde ] echo "Masz KDE w katalogu /usr" elif [ -x /usr/local/bin/startkde ] echo "Masz KDE w katalogu /usr/local" else echo "Nie wiem gdzie masz KDE" Sprawdzanie warunków Po zapoznaniu się ze składnią polecenia if pojawia się pytanie, jak są sprawdzane warunki. Do sprawdzania warunków służy polecenie test. Należy zatem pamiętać, aby nie nadawać skryptom nazwy test! test wyrażenie1 operator wyrażenie2 lub [ wyrażenie1 operator wyrażenie2 ] W przypadku tego drugiego zapisu (z którego korzystaliśmy w przykładach dla instrukcji if) należy pamiętać o spacji pomiędzy nawiasami, a treścią warunku. Wartość zwracana Polecenie test zwraca wartość 0 (true), jeśli warunek jest spełniony lub wartość 1 (false) w przeciwnym wypadku. Wartość zwracana umieszczana jest w zmiennej specjalnej $? Poniżej wyszczególniono kilka przykławych operatorów polecenia test (patrz man bash): 3

-a - plik istnieje -b - plik istnieje i jest blokowym plikiem specjalnym -c - plik istnieje i jest plikiem znakowym -d - plik istnieje i jest katalogiem -e - plik istnieje -h - plik istnieje i jest linkiem symbolicznym = - sprawdza czy wyrażenia są równe!= - sprawdza czy wyrażenia są różne -n - wyrażenie ma długość większą niż 0 -z - wyrażenie ma zerową długość -r - można czytać plik -w - można zapisywać pliku -x - można plik wykonać -f - plik istnieje i jest plikiem zwykłym -p - plik jest łączem nazwanym -N - plik istnieje i był zmieniany od czasu jego ostatniego odczytu -O - plik istnieje i jego właścicielem jest efektywny id użytkownika -G - plik istnieje i jego właścicielem jest efektywny id grupy plik1 -nt plik2 - plik1 jest nowszy od pliku2 plik1 -ot plik2 - plik1 jest starszy od pliku2 -lt - mniejsze niż -gt - większe niż -ge - większe lub równe -le - mniejsze lub równe Instrukcja case Instrukcja case pozwala na konanie wyboru wielowariantowego. Wartość zmiennej zmienna porównywana jest z poszczególnymi wzorcami. Jeśli wzorzec ma taką samą wartość jak zmienna, wówczas wykonywane są polecenia przypisane tego wzorca. Jeśli nie uda się znaleźć pasowania wykonywane jest polecenie myślne oznaczone symbolem * (gwiazdka). Dlatego warto zawsze to polecenie myślne umieszczać w instrukcji case, co będzie zabezpieczeniem przed błędami popełnionymi przez użytkownika. case zmienna in "wzorzec1") polecenie1 ;; "wzorzec2") polecenie2 ;; "wzorzec3") polecenie3 ;; *) polecenie_myślne esac echo "Podaj cyfre dnia tygodnia" 4

read d case "$d" in "1") echo "Poniedzialek" ;; "2") echo "Wtorek" ;; "3") echo "Sroda" ;; "4") echo "Czwartek" ;; "5") echo "Piatek" ;; "6") echo "Sobota" ;; "7") echo "Niedziela" ;; *) echo "To nie jest dzien tygodnia" esac Pętla for Wykonuje polecenia zawarte wewnątrz pętli, na każdym składniku listy (iteracja). for zmienna in lista instrukcja1 instrukcja2 for x in jeden dwa trzy; echo "To jest $x" Do zmiennej x w każdym przebiegu pętli for przypisywany jest jeden z elementów listy. Następnie wykonywane jest polecenie echo "To jest $x" Pętla for może być również przydatna, gdy chcemy wykonać jakąś operację na wszystkich plikach w danym katalogu. Poniższy skrypt obrazuje taką sytuację: for x in *.html; echo "To jest plik $x" Skrypt ten wypisuje wszystkie pliki o rozszerzeniu.html, znajdujące się w bieżącym katalogu. Pętla select Pętla select wygeneruje z listy słów po in proste ponumerowane menu, gdzie każdej pozycji odpowiada kolejna liczba od 1 wzwyż. Poniżej menu znajduje się znak zachęty PS3. Umożliwia to wprowadzenie cyfry odpowiadającej wybranej przez nas pozycji w menu. W przypadku, gdy zostanie naciśnięty klawisz ENTER, menu zostanie wyświetlone ponownie. Wartość wprowadzona przez użytkownika zostanie zapisana w zmiennej REPLY. Gdy odczytane zostaje EOF 5

(ang. End Of File) czyli znak końca pliku (CTRL+D) pętla select zakończy pracę. Pętla działa tąd póki nie wykonane zostaje polecenie break lub return. select zmienna in lista polecenie select myselection in fred wilma barney betty case $myselection in fred) echo "Fred zostal wybrany" ;; wilma) echo "Wilma zostala wybrana" ;; pebbles) echo "Barney zostal wybrany" ;; betty) echo "Betty zostala wybrana" ;; esac Efekt działania tego skryptu przedstawiony jest poniżej: 1) fred 2) wilma 3) barney 4) betty #? 3 Barney zostal wybrany 1) fred 2) wilma 3) barney 4) betty #? 5 1) fred 2) wilma 6

3) barney 4) betty #? 1 Fred zostal wybrany 1) fred 2) wilma 3) barney 4) betty #? CTRL-C Pętla while W pierwszym kroku sprawdzany jest warunek czy jest spełniony. Jeśli tak, wówczas wykonywane są polecenia zawarte wewnątrz pętli. Po sprawdzeniu, że warunek jest fałszywy, wykonanie pętli zostaje przerwane. while warunek polecenie x=1; while [ $x le 10 ] echo Napis pojawil sie po raz: $x x=$[x+1] Na początku sprawdzany jest warunek, czy zmienna x o wartości początkowej 1 jest mniejsza lub równa 10. Warunek ten jest prawdziwy w związku z czym wykonywane są polecenia zawarte wewnątrz pętli. Przy każdym przebiegu pętli wartość zmiennej x zwiększa jest o 1. Gdy wartość x przekroczy 10, wykonanie pętli zostanie przerwane. Pętla until Pętla until sprawdza, czy warunek jest spełniony. Jeśli nie jest, wykonywane jest polecenie lub lista poleceń zawartych wewnątrz pętli, miedzy słowami kluczowymi a. Pętla until kończy swoje działanie w momencie gdy warunek stanie się prawdziwy. 7

until warunek polecenie x=1; until [ $x ge 10 ] echo Napis pojawil sie po raz: $x x=$[x+1] Zmienna x, ma wartość 1. Sprawdzamy, czy wartość zmiennej x jest większa lub równa 10. Jeśli nie to wykonywane są polecenia zawarte wewnątrz pętli. Gdy zmienna x osiągnie wartość 10, pętla zostanie zakończona. 12.3. Obliczenia arytmetyczne Obliczenia wykonywane są na długich liczbach całkowitych (long integer), bez kontroli przepełnienia (overflow), mimo iż dzielenie przez 0 jest przechwytywane i oznaczane jako błąd. Operatory i ich priorytety oraz sposób ich łączania są takie same jak w języku C. Poniższa lista operatorów pogrupowana jest w poziomy operatorów o jednakowym priorytecie. Poziomy podano w kolejności malejącego priorytetu: id++ id-- - post-inkrementacja i post-dekrementacja zmiennej ++id --id - pre-inkrementacja i pre-dekrementacja zmiennej - + - jednoargumentowy minus i plus! ~ - negacja logiczna i bitowa ** - potęgowanie * / % - mnożenie, dzielenie, reszta z dzielenia + - - dawanie, odejmowanie << >> - lewo i prawostronne przesunięcie bitowe <= >= < > - porównania ==!= - równości i nierówność & - bitowa koniunkcja (AND) ^ - bitowa alternatywa wyłączna (XOR) - bitowa alternatywa (OR) && - logiczna koniunkcja (AND) - logiczna alternatywa (OR) wyraz?wyraz:wyraz - obliczenie warunkowe = *= /= %= += -= <<= >>= &= ^= = - przypisanie z wykonaniem działania wyraz1, wyraz2 - przecinek 8

Często zachodzi potrzeba wyliczenia wartości jakiegoś wyrażenia, np. 2*6. Można to zrobić na dwa sposoby: albo korzystając z mechanizmów basha albo z zewnętrznego polecenia. Mechanizm basha wygląda następująco: $(( wyrażenie )). Można przypisać to np. jakiejś zmiennej: ZMIENNA=$((2+2)). Programem, który służy obliczania wartości wyrażenia jest expr. Pobiera on jako argumenty wyrażenie obliczenia. Każda liczba i każdy znak musi być oddzielony spacją. Wynik wyrażenia zmiennej przypisujemy tak jak wynik działania polecenia: ZMIENNA=`expr 2 \* 2` Zadania 1. Za pomocą skryptu wykonaj kopię wolnego zbioru katalogu o nazwie złożonej z bieżącej daty. Dowolny zbiór ma być przyjmowany jako zmienna specjalna. Katalog ma być w formacie daty: dd.mm.yy. Skrypt ma odpowiednio reagować na sytuację, gdy katalog już istnieje (czyli go nie tworzyć). 2. Napisz program, który po uruchomieniu będzie czekał na wprowadzenie działania "A @ B", gdzie A, B to liczby, a @ to działanie +, -, * lub /, po czym będzie je obliczał. Każde z działań ma być osobną funkcją. 3. Napisz skrypt, który będzie zliczał liczby podawane przez Ciebie, a po wprowadzeniu q będzie wyprowadzał średnią arytmetyczną z podanych wcześniej liczb i żegnał się słowami: "papa". 4. Napisać skrypt, który sprawdzi aktualny czas systemowy i wypisze odpowiedni komunikat zgodnie z wartością godziny: <00-06) - "Pora na branoc, bo już księżyc świeci" i następnie wyłączy komputer :-), <06-12) - "Miłego dnia", <12-18) - "Dzień bry", <18-24) - "Dobry wieczór". 9