C2110 Operační systém UNIX základy programování 9. lekce Petr Kulhánek, Jakub Štěpán kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta Masarykova univerzita, Kotlářská 2, CZ-61137 Brno INVLS I ICL DO ROZVOJ L VZXlAVÁN' perační systém UNIX a základy programování 9. lekce Obsah >Bash * cyklus pomoci while > Gnuplot * přehled jazyka, příkaz plot, terminály, příkaz splot )perační systém UNIX a základy programování 9. lekce -2- Bash > cyklus pomoci while Dperační systém UNIX a základy programování 9. lekce Cyklus pomocí while Cyklus (smyčka) je řídicí struktura, která opakovaně provádí posloupnost příkazů. Opaková i ukončení cyklu je řízeno podmínkou. cyklus probíhá dokud prikazl vrací v návratové hodnotě 0 while prikazl do prikaz2 • • • done Kompaktní zápis: while prikazl; do prikaz2 • • • done perační systém UNIX a základy programování 9. lekce Cyklus pomocí for versus while provede se před spuštěním cyklu (inicializace počítadla) pokud je podmínka splněna, vykonají se příkazy v bloku do/done >1=1 while test $1 -le 10; do echo $1 I=xexpr $1 + r done aktualizace počítadla po vykonání příkazů perační systém UNIX a základy programování 9. lekce -5- Presmerovania roury Čtení souboru po řádcích: cat soubor.txt | while read A; do prikaz2 • • • done roura while read A; do prikaz2 • • • done < soubor . txt Přesměrování do souboru: for((1=1;I <= 10;I++)); do echo $1 done > soubor. txt přesměrování Výstup všech příkazů v cyklu je přesměrován do soubor.txt. iperační systém UNIX a základy programování 9. lekce Domácí úkol I Vysvětlete rozdílné chování následujících skriptů. Soubor data.txt obsahuje pět řádků. #!/bin/bash 1=0 cat data.txt | while read A; do I=$(($1+1)) done vypíše číslo 0 #!/bin/bash 1=0 while read A; do I=$( ($1 + 1) ) done < data.txt echo $1-----' výpise cislo 5 perační systém UNIX a základy programování 9. lekce Domácí úkol II Soubor rst.out (wolf.ncbr.muni.cz:/home/kulhanek/Data/rst.out) obsahuje výsledky z molekulové dynamiky. Úkolem je ze souboru vyextrahovat závislost teploty simulovaného systému na čase. NSTEP = Etot BOND 1-4 NB EELEC EAMBER 500 cas 942.6248 51.3204 17.7099 ■494 .7423 TIME(PS) = EKtot ANGLE 1-4 EEL E GB 0.500 TEMP(K) 151.0990 292.3619 981. 4071 -164.7991 288.02 EPtot DIHED VDWAALS RESTRAINT teplota PRESS 0.0 791.5258 176.5980 -68.3301 0 .1822 non-restraint) 791.3436 POZOR: Skript nesmí obsahovat příkazy grep, awk a ani jejich varianty. Při řešení použijte příkaz read a while. )perační systém UNIX a základy programování 9. lekce -8- Gnuplot > (Ne)lnteraktivní spouštění > Příkaz plot > Terminály > Ukázky http://www.gnuplot.info/ (dokumentace, tutoriály, zdrojové kódy) PM3 DMP + H2C free enemy [kcal/mol] 3.5 Í 3 ID (/) 2.5 Q 1.5 100 I 80 60 40 20 -4-3-2-1012 34 DD 14-16/16-7 [A] Dperační systém UNIX a základy programování 9. lekce Ukázky minimum QM / ABF / Rewald = 8 ä -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 DD (Ä) )perační systém UNIX a základy programování 9. lekce -10- Ukázky )perační systém UNIX a základy programování 9. lekce -11- Interaktivní spouštění Gnuplot slouží k vykreslování 2D a 3D grafů umožňující práci v interaktivním tak i skriptovacím režimu. GNUPLOT Version 4.4 patchlevel 3 last modified March 2011 System: Linux 3.2.0-31-generic Copyright (C) 1986-1993, 1998, 2004, 2007-2010 Thomas Williams, Colin Kelley and many others gnuplot home: http://www.gnuplot.info faq, bugs, etc: type "help seeking-assistance" immediate help: type "help" plot window: hit 'h' příkazová řádka shellu Bash Interaktvní mód [kulhanek@wolf ~]$ gnuplot Terminal type set to 1wxt gnuplot> _ příkazová řádka gnuplotu )perační systém UNIX a základy programování 9. lekce Neinteraktivní spouštění 1) Nepřímé spouštění Spouštíme interpreter jazyka a jako argument uvádíme jméno skriptu. $ gnuplot muj_skript_v_gnuplotu Skripty nemusí mít nastaven příznak x (executable). 2) Přímé spouštění Spouštíme přímo skript (shell automaticky spustí interpreter). $ chmod u+x muj skript v gnuplotu $./muj_skript_v_gnuplotu Skripty musí mít nastaven příznak x (executable) a interpreter (součást skriptu). #!/usr/bin/gnuplot plot sin(x) pause -1 perační systém UNIX a základy programování 9. lekce -13- Příkaz - plot > plot funkce/soubor [nastaveni_zobrazeni] [, fce/soubor ...] Zobrazí XY graf funkce nebo datové řady obsažené v souboru Příklady: lines, points, linespoints, dots barva čáry > plot sin(x) > plot cos(5.7*x+3.4) with points linecolor rgb "red" \ linewidth 2 title "cos" název souboru s daty tloušťka čáry ^ *\ legenda \ > plot "input.txt" using 1:2 with lines druhý sloupec tvoří y-ové hodnoty první sloupec tvoří x-ové hodnoty > plot sin(x), cos(x) zobrazí funkci sin a cos do jednoho grafu )perační systém UNIX a základy programování 9. lekce -14- Cvičení 1. Znázorněte průběh funkce y=x2 2. Průběh funkce z prvního cvičení zobrazte modrou barvou 3. Zobrazte průběh teploty v čase obsažený v souboru /home/kulhanek/Data/temp.txt Čas je uveden v prvním sloupci, teplota je uvedena v druhém sloupci. 4. Zobrazte do jednoho grafu funkci sin(x) pomocí červené čáry a funkci cos(x) pomocí oranžové čáry a bodů. Úlohy řešte v interaktivním režimu. )perační systém UNIX a základy programování 9. lekce -15- Další příkazy > set title "popis" # záhlaví grafu > set xrange [min value :max value] # nastaví rozsah x-ové osy > set xlabel "popis" # nastaví popis x-ové osy > set yrange[min value :max value] # nastaví rozsah y-ové osy > set ylabel "popis" # nastaví popis y-ové osy > set nokey # nezobrazí legendu k datovým řadám > pause -1 # čeká na zmáčknutí klávesy )perační systém UNIX a základy programování 9. lekce -16- Cvičení 1. Napište skript, který znázorní průběh funkce y=x2 v rozsahu 0-10 pro x-ovou hodnotu. Skript spusťte nepřímo pomocí interpretru gnuplot. 2. Napište skript, který zobrazí průběh teploty v čase obsažený v souboru /home/kulhanek/Data/temp.txt. V grafu popište osy včetně určení jednotek. Čas je uveden v picosekundách, teplota v kelvinech. )perační systém UNIX a základy programování 9. lekce -17- Terminály Terminál určuje kam bude graf vykresl > set term xll > set term wxt in. # výstup je vykreslen do okna # výstup je vykreslen do okna (lepší vlastnosti) > set term png size 800,600 # výstup je vykreslen jako obrázek ve formátu png > set output "output.png" # výstup bude uložen do souboru output.png > test # vytiskne stránku demonstrující vlastnosti terminálu (ne všechny terminály mají stejné možnosti výstupu) )perační systém UNIX a základy programování 9. lekce -18- Ukázky výstupu z různých terminá wxt 'gj Gnuplot (window id : 0) 3a 3»®@ splot funkce/soubor [nastaveni_zobrazeni] [, fce/soubor ... Zobrazí XYZ graf funkce nebo datové řady obsažené v souboru. Směr pohledu se nastavuje příkazem set view a,b, kde a a b jsou směrové úhly. Pohled shora lze nastavit pomocí set view map Při zobrazování funkcí lze hustotu vzorkování pro x-ový a y-ový směr zadat příkazem set isosamples a,b, kde a a b udává počet vzorků v daném směru. Pro zvýraznění plochy pomocí funkční hodnoty lze použít pm3d zobrazení, např. > splot x*x+y*y with pm3d )perační systém UNIX a základy programování 9. lekce -21- Cvičení 1. Zobrazte funkci x2+y2 2. Nastavte pohled shora (set view) 3. Zrušte pohled shora (unset view) 4. Zvyšte hustotu bodů pro zobrazeni funkce (set isosamples). Použijte hodnoty 10,20 ; 20,10 a 20,20 5. Použijte zobrazení pm3d 6. Nastavte pohled shora (set view) Úlohy řešte v interaktivním režimu. )perační systém UNIX a základy programování 9. lekce -22-