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: Nazwa Autor Pliki konfiguracyjne Zastosowania sh Ken Thompson Steven Bourne Nieinteraktywne (skrypty) bash .bashrc wszystkie ksh David Korn .profile csh Bill Joy .cshrc .login tcsh .tcshrc .login
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
Ustawianie zmiennych lokalnych Zmienne powłoki csh sh Ustawianie zmiennych lokalnych set zmienna = wartość np. set zm = “ala” zmienna = wartość zm = “ala” Ustawianie zmiennych środowiskowych (przekazywanych do procesów wywoływanych przez skrypt) setenv zmienna = wartość setenv zm = “ala” export zmienna albo: export zmienna=wartość export zm=“ala”
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ą set zmienna = `polecenie` np. set a = `echo Ala ma kota` Arytmetyka expr wyrażenie1 operator wyrażenie2 np. expr 2 + 3 Podstawienie: jak przy podstawieniu efektu wykonania polecenia set zmienna = `expr wyrażenie1 operator wyrażenie2` 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 poleceniu expr 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)
Prosta instrukcja if csh sh Instrukcje, które są bardzo użyteczne w skryptach (można je wykonywać również “z ręki”) Prosta instrukcja if csh sh if (warunek) polecenie if (warunek) then polecenie1 … polecenien endif if [ warunek ] then fi
Złożona instrukcja if csh sh if (warunek1) then blok_poleceń else if (warunek2) then else endif if [ warunek1 ] then elif [ warunek2 ] fi
Wyrażenia warunkowe dotyczące plików 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) znaczenie W1 = = W2 W2 < W2 W1 > W2 W1 <= W2 W1 >= W2 W1 != W2 W1 –eq W2 W1 –lt W2 W1 –gt W2 W1 –le W2 W1 –ne W2 Równe Mniejsze Większe Mniejsze lub równe Większe lub równe Różne
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ą
(op oznacza operator koniunkcji lub alternatywy) Wyrażenia złożone csh sh znaczenie !W Przeczenie W1 || W2 Alternatywa W1 && W2 Koniunkcja (W1) op W2 [ W1 ] op [W2 ] grupowanie (op oznacza operator koniunkcji lub alternatywy)
Instrukcja wyboru case csh sh switch zmienna case ‘wartość1’ blok_poleceń breaksw case ‘wartość2’ … case default endsw case zmienna in wartość1) wartość2) *) esac
Przykład skryptu csh z instrukcją case Przykład skryptu bash z instrukcją case
Instrukcje pętli foreach i for csh sh foreach (lista) polecenie1 … polecenien end for zmienna in lista do done
Instrukcja pętli while csh sh while (warunek) polecenie1 … polecenien end while [ warunek ] do done
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