Úvod do UNIXu (6 th round) David Hoksza

Slides:



Advertisements
Podobné prezentace
Pro začátek něco lehčího
Advertisements

Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Operační systém UNIX Soubory a adresářová struktura Roman Danel
VISUAL BASIC Práce se soubory.
Programování v Pascalu Přednáška 4
C# pro začátečníky Mgr. Jaromír Osčádal
Příkazový řádek Windows
Shell jako programovací jazyk Příkazy větvení Dva operátory pro tvorbu podmíněných příkazů if, case Obecný formát: if podmínka then příkaz1 [else příkaz2]
If-else, do-while, switch, operátory
Programování v Pascalu Přednáška 7
Programování PA - 2.
Materiály k přednášce Úvod do programování Ondřej Čepek.
MATLAB® ( část 3 - scripty).
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Informatika I 3. přednáška
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_18 Digitální učební materiál Sada: Úvod do programování.
Podmienený príkaz. Kĺúčové slová  Pro podmínky se v Pascalu používají klíčové příkazy IF, THEN a ELSE.  Také se jim říká „príkaz vetvenia"..  Příkaz.
Shell Team Jan Kupka Petr Kykal Tomáš Paríšek si Vám dovoluje představit
Datové typy a práce s nimi
Úkol Vytvořit soubor – touch file Zpřístupnit ho ostatním studentům, ale ne mě (uživatel tupost) – lze to? Na čem to závisí? – závisí to na tom, zda jsou.
JavaScript Podmínky, cykly a pole.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Výpočetní technika a algoritmizace I
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_06 Digitální učební materiál Sada: Úvod do programování.
Dynamické dokumenty na straně serveru Informatika pro ekonomy II přednáška 8.
UNIX — doplňky Informatika pro ekonomy II přednáška 9.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
Algoritmizace a programování Textové soubory - 13 Mgr. Josef Nožička IKT Algoritmizace a programování
A1PRG - Programování – Seminář Ing. Michal Řízení běhu programu 5 Verze
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES CYKLY V PHP.
XQuery Dotazovací jazyk XML Daniel Privalenkov. O čem bude prezentace Nutnost dotazovacího jazyku v XML Rychlý přehled XQuery Několik příkladů.
Problémy s češtinou České znaky se standardně nepovažují za alfanumerické znaky (\w) Vadí to při třídění vyhodnocování regulárních výrazů Je třeba použít.
Úvod do UNIXu (4 th round) David Hoksza (většina sekce o vi a obrázek na slidu 7 převzat od Libora Forsta –
Operační systém GNU Linux Příkazy pro správu procesů.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Úvod do UNIXu (5th round)
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
ZÁKLADNÍ POJMY. ZDROJOVÝ TEXT PROGRAMU Tvoří: klíčová slova komentáře identifikátory.
doc. RNDr. Zdeněk Botek, CSc.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
4. Typ pole 4.1 Jednorozměrná pole
Úvod do UNIXu (6th round)
Pascal – cyklus while Mgr. Lenka Švancarová.
Úvod do UNIXu (6 th round) David Hoksza
PHP Stručný úvod.
Operační systém GNU Linux
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Programovací jazyk C# 4. část - cykly.
Úvod do Pythonu – IO operace se soubory.
Linux - skripty Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Algoritmizace a programování
Kurz algoritmizace a programování v jazyce C
Úvod do UNIXu (5th round)
Výukový materiál zpracován v rámci projektu
TNPW1 JavaScript Ing. Jiří Štěpánek.
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Databázové systémy a SQL
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Podprogramy.
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Databázové systémy a SQL
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Úvod do UNIXu (6 th round) David Hoksza

Substituce příkazu `cmd args`, $(cmd args)  var=`find. –name “*.php”`  var=`find. –name “*.php” | wc -l`  echo $var běží na stejné úrovni shellu

Návratové hodnoty Úspěch  0 Neúspěch  > 0  záleží na programu, jak definuje chybové návratové kódy exit [N]  ukončí provádění skriptu a vrátí rodičovskému procesu návratovou hodnotu N  defaultně vrací 0

Řídící struktury (1) for var in list; do commands [break [N]] [continue [N]] done list se uvažuje jako seznam slov a ne seznam řádků!!!! break  ukončení provádění cyklu continue  ukončení provádění dané iterace a skok na další středník za list je požadován při zápisu do na stejný řádek výstup cyklu lze přesměrovat for var in `ls *`; do cp $var $var.bak done for var in file1 file2 file3; … for var in *; … for var in `cat file`; … for i in ; do echo $i done | wc –l

read načtení řádky ze vstupu do proměnné  echo “Write string: “; read x; echo $x  read –p “Write string: “ x; echo $x lze přesměrovávat  read user_record < /etc/passwd

Řídící struktury (2) while list; do commands [break] [continue] done dokud je návratová hodnota příkazů z list true (0) break  ukončení provádění cyklu continue  ukončení provádění dané iterace a skok na další středník za list je požadován při zápisu do na stejný řádek při přesměrování souboru do while pomocí roury běží while v subshellu  neplatí to při přesměrování vstupu do cyklu na konci cyklu pomocí < while read line; do echo “You wrote: “ $line; #ukonceni iterace Ctrl+d #ukonceni skriptu Ctrl+c done cat /etc/passwd | while read line … while : ; do … done

Řídící struktury (3) if cmd; then commands [elif list commands ] [else commands] fi v listu je příkaz (seznam příkazů) jejichž návratová hodnota se porovnává pomocí příkazů:  test  [ xxx ] if mkdir "$1" 2>/dev/null; then echo "Directory $1 created“ else echo "Directory $1 probably exists" fi if mkdir "$1" 2>/dev/null; then echo "Directory $1 created" elif test -d $1 ; then #elif [ -d $1 ] ; then echo " Directory $1 already exists" else echo "Directory $1 not created" fi

test (1) shell umí v podmínkách porovávat pouze návratové hodnoty programů test condition, [ condition ]  mezery jsou u [ ] důležité!  -f file … zda soubor file existuje test -f filename; echo $?; [ -f filename ]; echo $?  -d dir … zda je dir adresář  -L file … zda je file symlink  -r file … zda má uživatel na file právo r  -w file … zda má uživatel na file právo w  -x file … zda má uživatel na file právo x  -z str … zda je str prázdný (zero)  -n str … zda je str neprázdný (nonzero)  str1 = str2 … zda se řetězec str1 rovná str2  str1 != str2 … zda se řetězec str1 nerovná str2

test (2)  num1 -eq num2 … zda se číslo num1 rovná num2  -ne, -lt, -le, -gt, -ge … nerovná (not equal), je menší (less than), je menší nebo rovno (less or equal), je větší (greater than), je větší nebo rovno (greater or equal) podmínky lze kombinovat condition1 –a condition2  and condition1 –o condition2  or !condition  negace ( condition )  priorita operací  [ 1 -le 2 -o \( 2 -le 1 -a 0 -ne 0 \) ]; echo $?  [ \( 1 -le 2 -o 2 -le 1 \) -a 0 -ne 0 ]; echo $?

expr shell pracuje s řetězci (nemá zabudovanou aritmetiku) expr arg1 op arg2  vyhodnotí a výsledek dá na výstup stejně jako návratovou hodnotu  +, -, *, /, %,  =,, =, != pozor na speciální význam znaků expr 1 \< 2; expr 1 “<“ 2 aritmetiku a porovnání lze také zavést použitím konstruktu $(( ))  echo $(( 100 * 200 / 10 ))

Řídící struktury (4) case str in vzor1) commands;; vzor2| vzor3) commands;; *) commands;; esac ;; zde vyjadřuje ukončení bloku! case $1 in a) a_param=1;; x|y) x_param=1; y_param=1;; *) no_params=1;; esac;

funkce [function] func_name () { … return N; } argumenty jsou přístupné přes čísla ($1, $2, …) volání funkce je stejné jako volání programů běží v aktuálním shellu nedědí se do subshellů fce() { var1=$1; return `expr $1 + 1` } var1=4 fce 10 echo $? echo $var1

eval dvounásobné vyhodnocení vstupu eval command  pipe="|" ; eval ls $pipe wc -l  var=abcd  eval $var=efgh  echo $var; echo $abcd;  eval echo \$$#

Další příkazy date  vypíše aktuální čas  používá se při logování alias str = ‘command’  vytvoří alias str, tj. příkaz str nyní reprezentuje command  zapisuje se do.bashrc (nebo jiných skriptů pouštěných při startu shellu), stejně jako ostatní příkazy, které se mají vykonat při nalogování

Příklady (1) Mějme tel. seznam v souboru. Skript pro vložení záznamu: echo "$1 $2" >> tel_sez; Odebrání z tel. seznamused "/^$1/ d" tel_sez > tel_sez~ && ( mv tel_sez~ tel_sez || rm tel_sez~ ) Skript pro zálohu souborů přidáním ~ a případným odebráním předem, pokud soubor existuje. for f in *; do if [ -f $f~ ] ; then rm $f~; fi ; cp $f $f~ ; done Program, který bude při mazání logovat, kdo a kdy provedl rm rm $1 && echo "`date` - $USER : $1" >> ~/remove.log Skript pro vypsání řádek souborů v aktuálním adresáři, prefixovaných jejich číslem. for filename in *; do linecount="1" while read line ; do echo "${linecount}: $line" linecount="$(( $linecount + 1 ))" done < $filename done

Příklady (2) Skript pro vypsání počtu spustitelných souborů v PATH a HOME declare -i count count=0; tempPath=`echo "$PATH:$HOME" | sed -e "s/ /~~/g" -e "s/:/ /g"` echo $tempPath; for dir in $tempPath ; do dir=`echo $dir | sed "s/~~/ /g"` if [ -d "$dir" ] ; then for file in `ls $dir` ; do if [ -x "$dir/$file" ] ; then count=$count+1 else nocount=$((nocount+1)); fi done fi done echo "Binaries count: " $count ", Others: " $nocount

awk Aho, Weinberg, Kernighan filtrování vstupního textu po řádcích + práce se sloupci vyhledávání podle regulárních výrazů vlastní programovací jazyk podobný C awk > nawk – 1985 (Sun OS) -> gawk (POSIX) 1992

awk – základní syntaxe awk ‘script’ files  script je libovolný počet posloupností /pattern/ { actions } bez pattern se actions vztahují na všechny řádky  sloupce odděleny znaky z IFS (tj. defaultně mezera, tabulátor)  sloupce odkazovány pomocí $1, $2, … awk '{ print $1 $3 ; }' prices

awk - printf printf(fmt, args)  počet args je odvozen od fmt  fmt (formátovací řetězec) obsahuje text a dvojice %znak, kde za i-tý výskyt je nahrazen i-tý argument  % s … řetězec c … znak d … integer f … float  může obsahovat \n, \t, … printf(”Řetězec: %s\nInteger: %d”, $str, $i)

awk – porovnání value ~ /pattern/  zda hodnota value vyhovuje vzoru pattern value !~ /pattern/  nevyhovuje, =, ==, != awk ' $3 <= 75 { printf "%s\t%s\n",$0,”Malé množství" ; } $3 > 75 { print $0 ; } ' prices.txt #třetí sloupec je množství Lze skládat pomocí operátorů && (and) a || (or) awk ' ($2 ~ /^\$[1-9][0-9]*\.[0-9][0-9]$/) && ($3 < 75) { printf "%s\t%s\n",$ě,”Malé množství" ; } ' prices.txt #druhý sloupec je cena v dolarech

awk lze definovat akce prováděné na začátku a na konci skriptu awk ' BEGIN { actions } /pattern/ { actions } END { actions } ' files v inicializační sekci lze  inicializovat proměnné, které budou v průběu inkrementovány  nastavit FS (field separator) BEGIN { FS=":" ; } do skriptu lze předávat proměnné shellu awk ' $3 <= count { print ; } ' count="$count" prices.txt lze kombinovat s shellovým programováním  ls -l | awk '$1 !~ /total/ { printf "%-32s %s\n",$9,$5 ; }'

proměnné awk FILENAME  jméno zpracovávaného souboru NR  číslo právě zpracovávaného záznamu NF  počet polí právě zpracovávaného záznamu OFS  výstupní separátor polí (defaultně mezera) FS  vstupní separátor polí (defaultně mezera a tabulátor) ORS  výstupní separátor záznamů (defaultně nový řádek) RS  vstupní separátor záznamů (defaultně nový řádek) awk 'BEGIN { FS=":" ; } { print $1, $6 ; }' /etc/passwd

awk – tok programu awk umožňuje práci s while, for, if se stejnou syntaxí jako v C if (expression1) { action1 } else if (expression2) { action2 } else { action3 } if ($2 > 0 && $3 < 35) { print “xxx”; } else {print $1} while (expression) { actions } awk 'BEGIN { x=0 ; while (x < 5) { x+=1 ; print x ; } }' for (initialize_counter; test_counter; increment_counter) { action } awk '{ for (x=1;x<=NF;x+=1) { printf "%s ",$x ; } printf "\n" ; }' prices.txt

Úkol 1. Zkraťte následující kód na jednořádkový zápis (myslí se na 1 příkaz): if [ -n "$1" ] then param1=$1 else param1=20 fi 2. Napište skript, který zadané soubory uloží do jednoho velkého souboru (název tohoto bude jako první argument, soubory pro vložení budou následovat). 3. Napište skript, který projde vstupní proměnné skriptu a pokuď se 2 následující hodnoty shodují, pak o tom podá informaci. 4. Vytvořte skript, který dostane jako vstup soubor a na výstup dá pouze řádky s délkou vetší než konstanta. Spočítejte průměr čísel, které jsou argumentem vstupu. 5. Spočítejte faktoriál čísla zadaného ze standardního vstupu 6. Najděte způsob, jak zjistit, kolik instancí shellu běží pod daným uživatelem (když zadáme příkaz shell, tak se dostaneme do nové instance shellu (subshellu) a toto můžeme opakovat a zanořovat se, jde tedy zjistit, jak moc jsme zanoření).