plik


ÿþwiczenie 5. Skrypty powBoki - programowanie w powBoce bash. 1. Cel wiczenia Celem wiczenia jest poznanie mo|liwo[ci powBoki bash od strony programistycznej. System UNIX (Linux) pozwala tworzy skrypty, czyli wykonywalne pliki tekstowe, zawierajce polecenia powBoki oraz inne instrukcje sterujce (wzorem innych jzyków programowania). 2. Przygotowanie do wiczenia " definicja powBoki systemu operacyjnego Linux (UNIX), " typy powBok i ich wBa[ciwo[ci, " przetwarzanie potokowe. 3. Skrypty powBoki PowBoka przyjmuje i interpretuje naciskane klawisze jako polecenia. W systemach UNIX dostpnych jest kilka powBok, m. in. Bourne, Korn, C. PowBoki te maj wiele cech wspólnych, na przykBad mo|liwo[ wykonywania skryptów (dziaBajcych podobnie jak pliki BAT w DOS-ie). Dla poleceD bdcych zewntrznymi programami powBoka tworzy procesy potomne, w których s one uruchamiane. Po utworzeniu taki proces potomny dziedziczy zmienne [rodowiska i bie|cy katalog roboczy powBoki. Skrypty, czyli pliki tekstowe zawierajce polecenia powBoki nie musz mie okre[lonej nazwy i rozszerzenia, jednak musz mie nadane prawa do wykonywania. " skrypt powBoki to plik tekstowy, rozpoczynajcy si sekwencj: #!/bin/bash # opis/komentarz polecenia pierwsza linia okre[la powBok, w której wykonywany jest skrypt; druga to komentarz " polecenia: sekwencja napisów (komend), oddzielonych biaBymi znakami, " argumenty skryptu: pierwszy napis ($0) to nazwa polecenia lub skryptu powBoki, " pozostaBe parametry ($1...$n) przekazywane jako argumenty do polecenia, " aby skrypt mógB by wykonany musi mie nadane prawa do wykonywania dla u|ytkownika. 2. Zmienne i podstawienie w skryptach " przypisywanie warto[ci: imie = ala, " obliczanie warto[ci arytmetycznych: echo $[1+1] (polecenie echo wypisuje argument na standardowym wyj[ciu: echo $imie), " polecenie katalog = ls przypisuje zmiennej katalog wynik dziaBania polecenia ls, " polecenie shift zmienia kolejno[ parametrów przekazywanych do skryptu: $n = $(n+1). zmienne powBoki $HOME katalog domowy u|ytkownika $PATH lista (:) kartotek do przeszukiwania $USER identyfikator u|ytkownika $TERM typ terminala (vt100) $PS1 znak zachty pierwszego poziomu $PS2 znak zachty drugiego poziomu $SECONDS liczba sekund dziaBania powBoki $HISTFILE nazwa pliku z histori $RANDOM liczba pseudolosowa (zawsze inna) 3. Instrukcje sterujce Ptla for: Pozwala powtarza pewne czynno[ci dla kolejnych wyrazów z listy: for zm in lista do <polecenia> done przykBad: for plik in *.txt do cp $plik $plik.bak done Ptla while: while wyrazenie do <polecenia> done przykBad: n=1 while [ $1 ] do echo $n $ -- $1 n = $[ n + 1 ]; shift done Instrukcja warunkowa if: if wyrazenie then <polecenia> else <polecenia> fi przykBad: if [ -f .profile ]; then echo "Jest!"; fi Polecenie test: U|ywane z poleceniami sterujcymi powBoki: if [ "$1" == "hej" ] then echo Pierwszy parametr to \"hej\" fi t1 = t2 równo[ tekstów t1 != t2 ró|no[ tekstów t1 prawdziwy, gdy t1 jest zdefiniowana operatory tekstowe -n t1 prawdziwy, gdy tekst jest niepusty -z t1 prawdziwy, gdy tekst jest pusty -d plik prawdziwy, gdy plik jest kartotek -f plik prawdziwy, gdy plik istnieje i jest regularny -r plik prawdziwy, gdy plik mo|e by czytany operatory plikowe -w plik prawdziwy, gdy do pliku mo|na pisa -s plik prawdziwy, gdy plik ma dBugo[ dodatni -x plik prawdziwy, gdy plik jest wykonywalny !w wyra|enie w jest faBszywe w1 -a w2 oba wyra|enia s prawdziwe operatory logiczne w1 -o w2 przynajmniej jedno jest prawdziwe Instrukcja case: case zmienna in wzorzec [ | wzorzec] ... ) instrukcje ;; wzorzec [ | wzorzec] ... ) instrukcje ;; ... esac przykBad: case "$poraDnia" in "tak" | "t" | "Tak" | "TAK") echo Dzien dobry! ;; [nN]) echo "Dobry wieczor" ;; *) echo "Odpowiedz tak lub nie" ;; esac 4. AWK  jzyk do przetwarzania plików tekstowych " wy[wietlanie plików, wierszy, pól (cut), " analizowanie tekstów ze wzgldu na wystpowanie okre[lonych cigów znaków (grep, egrep), " przygotowywanie raportów w oparciu o dane z pliku, " filtrowanie tekstów, " operacje arkusza kalkulacyjnego. " podstawowymi parametrami awk s pliki do przetworzenia, " pliki podzielone s na wiersze (rekordy), wiersze za[ na pola, " domy[lnym separatorem jest cig biaBych znaków, " separatorem mo|e by dowolny znak, " w takim formacie przechowywana jest wikszo[ unixowych plików konfiguracyjnych, " powy|szy format maj równie| bardzo czsto dane wyj[ciowe poleceD (np. ls). Zmienna $1 to pierwsze pole, $2 drugie, itd. Bie|ca linia to $0. przykBad: wybranie z pliku dwóch kolumn i zamiana miejscami: awk '{print $3,$2 }' inna mo|liwo[: awk -f program.awk dane_we1 dane_we2 > dane_wy Zamiast wzorca mo|e pojawi si warunek: awk '$4 > 100 {print $1*$4}' Inne warunki arytmetyczne: ==, !=, >, <, >=, <= Program obliczajcy sum wielko[ci plików w kartotece: ls -l | awk '/^-/{licznik = licznik+$5} END {print licznik}' Program wy[wietlajcy te linie, które s liczbami: /^[0-9]+(\.[0-9]+)?$/ { print $0 } zmienne wewntrzne NR liczba przeczytanych rekordów FNR to samo, ale w bie|cym pliku FILENAME nazwa bie|cego pliku FS separator pól NF liczba pól w bie|cym rekordzie ARGC liczba argumentów linii poleceD ARGV tablica argumentów linii poleceD 5. Zadania do samodzielnego wykonania 1. Napisz skrypt con_files, który uruchamia si z 4 parametrami  3 pierwsze to nazwy istniejcych plików tekstowych, np. jeden.txt, dwa.txt i trzy.txt, a ostatni  wynik.txt. Je[li 3 pierwsze pliki istniej  skrypt Bczy je w jeden plik tekstowy wynik.txt. 2. Napisz skrypt show, który wy[wietli wszystkie przekazane do niego argumenty, liczb przekazanych argumentów, itp. ($0 $1 $@ $*); nastpnie u|yj komendy shift i wy[wietl ponownie. 3. Napisz skrypt interactive, który wy[wietla poni|sze menu: [1] Wyswietl biezaca date" [2] Dopisz aktualna date do pliku jeden.txt" [3] Wylistuj biezacy katalog" [q] Koniec" Skrypt oczekuje na podanie odpowiedniego znaku (polecenie read) i wykonuje wskazane dziaBanie przypisane danemu znakowi (polecenie case). W przypadku podania innego znaku, bdz sekwencji skrypt powinien zgBosi bBd i zakoDczy dziaBanie. 4. Zmodyfikuj powy|szy skrypt, aby koDczyB swoje dziaBanie tylko po naci[niciu q (po wykonaniu bie|cego zadania powinien oczekiwa na nastpne polecenie z menu (ptla while...do). 5. Napisz skrypt show_proc, który jako argument przyjmuje numer procesu i wy[wietla informacje o procesie z danym numerem. 6. Napisz skrypt lss, który dziaBa podobnie jak ls i wy[wietla informacje o plikach w trzech kolumnach w kolejno[ci: nazwa pliku, rozmiar pliku i prawa (awk). 7. Zmodyfikuj powy|szy przykBad, aby dane w kolumnach: nazwa pliku i prawa byBy wyrównane do lewej, a dane w kolumnie rozmiar pliku  do prawej (awk, printf). 6. Literatura [1] Z. Królikowski, M. Sajkowski: "System operacyjny UNIX dla pocztkujcych i zaawansowanych", Wydawnictwo NAKOM, PoznaD 1995, [2] Arnold Robbins, Nelson H. F. Beebe: "Programowanie skryptów powBoki", Wydawnictwo HELION, Gliwice 2005, [3] http://www.freeos.com/guides/lsst/ch01sec07.html.

Wyszukiwarka

Podobne podstrony:
syst oper skrypty 2
8 37 Skrypty w Visual Studio (2)
MATLAB cw Skrypty
Skrypt Latex
skrypt rozdz 2 4
Biochemia zwierzÄ…t skrypt UR
T2 Skrypt do lab OU Rozdział 6 Wiercenie 3
Skrypt 1
SKRYPT ELEKTROTECHNIKA ZADANIA PRDZMIENNY3 FAZOWY 14
skrypt część ogólna J Woźniak
04 Rozmyte Syst Ekspertowe
matlab skrypty

więcej podobnych podstron