270 likes | 386 Views
Proponowany program wykładu monograficznego. Elementy programowania w językach skryptów w systemie UNIX. Posługiwanie się językiem awk i edytorem strumieniowym sed Praca na klastrach i superkomputerach w centrach obliczeniowych; systemy kolejkowania. Obliczenia równoległe.
E N D
Proponowany program wykładu monograficznego • Elementy programowania w językach skryptów w systemie UNIX. • Posługiwanie się językiem awk i edytorem strumieniowym sed • Praca na klastrach i superkomputerach w centrach obliczeniowych; systemy kolejkowania. • Obliczenia równoległe. • Baza danych PDB i inne bazy danych cząsteczek. • Wizualizacja cząsteczek i wielkości z nimi związanych. • Programy obliczeniowe używane w chemii kwantowej oraz obliczeniach dynamiki dużych układów molekularnych.
Języki skryptów Powłoka - Interpreter poleceń wydawanych przez użytkownika. Powłoki w systemie UNIX:
Jakie powłoki są dostępne w systemie: etoh:~> ls -l /bin/*sh* lrwxrwxrwx 1 root root 4 Oct 6 2005 /bin/ash -> dash -rwxr-xr-x 1 root root 625228 Dec 19 2004 /bin/bash lrwxrwxrwx 1 root root 21 Oct 6 2005 /bin/csh -> /etc/alternatives/csh -rwxr-xr-x 1 root root 83960 May 11 2005 /bin/dash lrwxrwxrwx 1 root root 4 Oct 6 2005 /bin/rbash -> bash lrwxrwxrwx 1 root root 4 Oct 6 2005 /bin/sh -> bash -rwxr-xr-x 1 root root 302476 May 19 2004 /bin/tcsh Sprawdzanie powłoki etoh:~> env | grep SHELL SHELL=/bin/tcsh
Skrypt: zbiór poleceń w języku powłoki zapisanych w pliku i wykonywanych zgodnie z sekwencją zapisu Składnia (ogólnie): #!powłoka opcje polecenie1 … #komentarz … polecenien Przykład (csh) #!/bin/csh -f echo “Prosty skrypt” echo –n “dzisiaj jest ” date #Podawanie aktualnego katalogu echo “Jestesmy w katalogu ”$cwd echo “Mamy tu nastepujace pliki” #Listowanie plikow ls -l
Parametry (argumenty) skryptu Skrypt można wywoływać jak każde polecenie unixowe, np: ./skrypt.sh ala ma kota Każdy parametr stojący za nazwą skryptu jest argumentem, który jest widziany we wnętrzu skryptu. Wewnątrz skryptu odwołujemy się do argumentów poprzez $1, $2, …, itd. Argument zerowy ($0) jest nazwą skryptu Liczba argumentów jest zakodowana w zmiennej $#argv
Podstawienie efektu wykonania polecenia pod zmienną setzmienna = `polecenie` np. set a = `echo Ala ma kota` Arytmetyka exprwyrażenie1 operator wyrażenie2 np. expr 2 + 3 Podstawienie: jak przy podstawieniu efektu wykonania polecenia set zmienna = `exprwyrażenie1 operator wyrażenie2` np. set x = `expr 2 ‘*’ 3`
Operatory w poleceniu expr + dodawanie - odejmowanie ‘*’ albo \* mnożenie ‘/’ albo \/ dzielenie całkowite % reszta z dzielenia Uwaga! Polecenie expr umożliwia tylko arytmetykę całkowitą. Do arytmetyki rzeczywistej należy użyć języka awk albo kalkulatora bc wywoływanego z opcją –l.
Do grupowania poszczególnych części wyrażenia w poleceniuexpr służą nawiasy – tak jak w zwykłej arytmetyce. Nawias należy poprzedzić odwróconym ukośnikiem (backslashem) Przykłady: expr \( $a + $b \) \* $c (wymuszanie dodawania przed mnożeniem) set i = `expr $i - \( $i / 2 \) \* 2 ` (zmienna i będzie miała po tej operacji wartość równą reszcie z dzielenia całkowitego i przez 2)
Instrukcje, które są bardzo użyteczne w skryptach (można je wykonywać również “z ręki”)
Wyrażenia warunkowe: Wyrażenia proste: 0 – fałsz; 1 – prawda. Wyrażenia warunkowe dotyczące plików -d plik : plik jest katalogiem -e plik : plik istnieje -f plik : zwykły plik -g plik : plik należy do okr. grupy -r plik : plik daje się czytać -s plik : plik zawiera jakieś dane -w plik : plik jest dostęny do zapisu -z plik : plik jest pusty -x plik jest wykonywalny -L plik : plik jest linkiem (dowiązaniem) symbolicznym
Porównywanie (w przypadku csh wyrażeń numerycznych i tekstowych w przypadku sh tylko numerycznych)
Porównywanie tekstów w sh: polecenie test test W1=W2 teksty są równe test W1!=W2 teksty są różne test –z W tekst ma długość zerową lub jest niezdefiniowany test –n W tekst ma długość niezerową
Przykład skryptu csh z instrukcją case Przykład skryptu bash z instrukcją case
Język awk awk ‘{polecenia}END{polecenia}’ plik_albo_dane_z_STDIN awk –f plik_z_poleceniami plik_albo_dane_z_STDIN Polecenia przed słowem END dotyczą przetwarzania strumienia wejściowego linia po linii a polecenia po słowie END są wykonywane po wyczerpaniu strumienia wejściowego. Przykład polecenia “z ręki” (sumowanie liczb kolejno wprowadzanych z klawiatury). awk ‘{sum=sum+$1}END{print sum}’
Edytor strumieniowy sed sed [opcje] –e ‘polecenia’ plik(i) sed [opcje] –f plik_z_poleceniami plik(i)
Przykład zawartości pliku z poleceniami (różniczkowanie numeryczne funkcji): { x[NR]=$1 f[NR]=$2 }END{ n=NR for (i=1;i<n;i++) p[i]=(f[i+1]-f[i])/(x[i+1]-x[i]) for (i=1;i<n-1;i++) b[i]=(p[i+1]-p[i])/(x[i+1]-x[i]) for (i=1;i<n-1;i++) print x[i],f[i],p[i],b[i] }
Podstawowe pojęcia języka awk: Pole: kolejny element linii strumienia danych. Pola są oddzielone odstępami jak w zwykłym tekście chyba, że zaspecyfikowano inny separator opcją –F. Pola są identyfikowane przez $1, $2,.... Symbol $0 oznacza całą linię. NF: liczba pól w bieżącej linii strumienia danych NR: liczba linii strumieni danych przeczytana dotychczas. Zmienna: cokolwiek co się pojawia i zaczyna od litery oprócz słów kluczowych. Słowo kluczowe: służy do konstrukcji poleceń awk Składnia poleceń języka awk bardzo przypomina składnię języka C.
Instrukcje: Podstawienie: a=wyrażenie Instrukcja warunkowa: if (warunek1) {blok_instrukcji} else if (warunek2) {blok instrukcji} ... else {blok instrukcji} Instrukcja pętli określonej: for (zmienna=start;warunek zakończenia; zmienna++) {blok_instrukcji} Instrukcja pętli z warunkiem: while (warunek) {blok instrukcji}
Funkcje arytmetyczne w awk: cos(x)exp(x) int(x) część całkowita log(x) logarytm naturalny sin(x) sqrt(x) atan2(y,x) arctan(y/x) rand() liczba losowa z przedziału <0,1) srand(x) ustawianie ziarna liczby generatora liczb losowych
Funkcje łańcuchowe w awk: gsub(r,s,t) zamienia wszystkie podlańcuchy odpowiadające wyrażeniu regularnemu r łańcucha t na wyrażenie s.index(s,t) podaje położenie podłańcucha t w łańcuchu s. length(s) długość łańcucha s match(s,r) podaje położenie wyrażenia regularnego r w łańcuhu s. split(s,a,sep) dzieli łańcuch s na elementy przechowywane w tablicy a używając separatora sep. sprintf(‘fmt’,expr) drukuje expr do łańcucha używając printf sub(r,s,t) zamienia pierwszy podlańcuch odpowiadający wyrażeniu regularnemu r łańcucha t na wyrażenie s. substr(s,p,n) wycina z łańcucha s podłańcuch o maksymalnej długości p, poczynając od pozycji n. tolower(s) zmienia duże litery na małe toupper(s) zmienia małe litery na duże
Literatura: • Unix i skrypty: • J.C.Armstrong, D. Taylor „Unix dla każdego”, Helion, Gliwice 2000 • A.Southerton, E.C. Perkins, Jr. „Słownik poleceń systemu Unix i X”, WNT, Warszawa 1995 • sed i awk: • 1. D. Dougerty, A. Robbins „sed i awk”, O’Reilly & Associates, 1997