Upload
mandell
View
49
Download
0
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
Proponowany program wykładu monograficznego
1. Elementy programowania w językach skryptów w systemie UNIX.
2. Posługiwanie się językiem awk i edytorem strumieniowym sed
3. Praca na klastrach i superkomputerach w centrach obliczeniowych; systemy kolejkowania.
4. Obliczenia równoległe.
5. Baza danych PDB i inne bazy danych cząsteczek.
6. Wizualizacja cząsteczek i wielkości z nimi związanych.
7. 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 Steven Bourne .bashrc wszystkie
ksh David Korn .profile wszystkie
csh Bill Joy .cshrc .login wszystkie
tcsh .tcshrc .login wszystkie
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/bashlrwxrwxrwx 1 root root 21 Oct 6 2005 /bin/csh -> /etc/alternatives/csh-rwxr-xr-x 1 root root 83960 May 11 2005 /bin/dashlrwxrwxrwx 1 root root 4 Oct 6 2005 /bin/rbash -> bashlrwxrwxrwx 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 SHELLSHELL=/bin/tcsh
Zmienne powłoki
csh shUstawianie zmiennych lokalnych
set zmienna = wartość
np.
set zm = “ala”
zmienna = wartość
np.
zm = “ala”
Ustawianie zmiennych środowiskowych (przekazywanych do procesów wywoływanych przez skrypt)
setenv zmienna = wartość
np.
setenv zm = “ala”
zmienna = wartość
export zmienna
albo:
export zmienna=wartość
np.
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 opcjepolecenie1…#komentarz…polecenien
Przykład (csh)
#!/bin/csh -fecho “Prosty skrypt”echo –n “dzisiaj jest ”date#Podawanie aktualnego kataloguecho “Jestesmy w katalogu ”$cwdecho “Mamy tu nastepujace pliki”#Listowanie plikowls -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`
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 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)
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
polecenie1
…
polecenien
fi
Złożona instrukcja if
csh sh
if (warunek1) then
blok_poleceń
else if (warunek2) then
blok_poleceń
else
blok_poleceń
endif
if [ warunek1 ]
then
blok_poleceń
elif [ warunek2 ]
then
blok_poleceń
else
blok_poleceń
fi
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)
csh sh 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 –gt 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ą
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’
blok_poleceń
breaksw
…
case default
blok_poleceń
endsw
case zmienna in
wartość1)
blok_poleceń
wartość2)
blok_poleceń
…
*)
blok_poleceń
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
polecenie1
…
polecenien
done
Instrukcja pętli while
csh sh
while (warunek)
polecenie1
…
polecenien
end
while [ warunek ]
do
polecenie1
…
polecenien
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łkowitalog(x) logarytm naturalnysin(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 smatch(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 printfsub(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łetoupper(s) zmienia małe litery na duże
Literatura:
Unix i skrypty:
1. J.C.Armstrong, D. Taylor „Unix dla każdego”, Helion, Gliwice 2000
2. 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