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]

Slides:



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

Úvod do programování Malá kouzla s příkazovým řádkem
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
ŘÍDÍCÍ STRUKTURY - PODMÍNKY
Programování v C jazyku - SEMINÁŘ
Dynamické dokumenty na straně klienta Informatika pro ekonomy II.
Operační systém UNIX Soubory a adresářová struktura Roman Danel
Programování funkcí v Excelu
JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.
Algoritmizace od algoritmu k Pascalu.
Třetí cvičení Podmíněné příkazy Cykly Break a Continue Switch Return
Vytváření, použití dávkových souborů
VISUAL BASIC Práce se soubory.
Programování v Pascalu Přednáška 3
C# pro začátečníky Mgr. Jaromír Osčádal
Zpracování textu Programovatelný filtr awk Jedná se o programovací jazyk (?), který pracuje se záznamy a poli, je pomalejší než vyšší programovací jazyky,
If-else, do-while, switch, operátory
Skriptový jazyk, který se používá při tvorbě stránek.
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
MATLAB® ( část 3 - scripty).
Základy Visual Basicu.
Vzdělávací materiál / DUMVY_32_INOVACE_02B10 Příkazový řádek: úvod AutorIng. Petr Haman Období vytvořeníListopad 2012 Ročník / věková kategorie3. ročník.
Algoritmizace a programování Podmíněné a cyklické příkazy- 08
Informatika I 3. přednáška
Jazyk vývojových diagramů
Přístupová práva, maska přístupových práv Jiří Hořejší.
Autor:Ing. Peter Podoba Předmět/vzdělávací oblast:Digitální technika Tematická oblast:Mikroprocesorová technika Téma:Atmel AVR – větvení programu Ročník:4.
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í.
Informatika I 2. přednáška
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
C – strukturované příkazy
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.
Cvičení.
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
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
C - shell C-shell (CS) je interpret uživatelských příkazů využívající pravidla a syntaxi podobná jazyku C. Některé rysy má navíc (historie, alias, …) *řetězec.
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.
C – switch Mgr. Lenka Švancarová. switch syntaxe switch (výraz) { case hodnota_1: příkaz(y)_ve_větvi_1; case hodnota_2: příkaz(y)_ve_větvi_2; … default:
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
A1PRG - Programování – Seminář Ing. Michal Řízení běhu programu 5 Verze
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES CYKLY V PHP.
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.
Pascal – strukturované příkazy
Úvod do UNIXu (6th round)
Úvod do UNIXu (6 th round) David Hoksza
Operační systém UNIX Příkazové prostředí UNIXu: příkaz [argumenty] [jméno] Ve jménech příkazů a parametrech se rozlišují malá a velká písmena.
Úvod do UNIXu (6 th round) David Hoksza
Cvičení 2 Podmíněné příkazy, cykly. Podmíněné příkazy Podmínka – jakýkoliv logický výraz ( a=1,……..) ( a=1,……..) Příkaz – vlastní instrukce, která se.
PHP Stručný úvod.
Operační systém GNU Linux
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Výukový materiál zpracován v rámci projektu
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í
Vytváření dokumentace algoritmů
Výukový materiál zpracován v rámci projektu
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
Základní příkazy OS UNIX (1)
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Transkript prezentace:

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] fi Klíčová slova musí být od předcházejícího textu oddělena středníkem nebo CR, na místě podmínky operátor true, false, libovolný příkaz. Každý program po svém ukončení nastavuje stavový příznak, 0 – úspěšné ukončení (true), kladné – neúspěšné ukončení (false). Přístupnost stavového příznaku - $? grep 0 – alespoň jeden výskyt 1 – žádný výskyt 2 – syntaktická chyba $ if false > then echo “To nepujde” > else echo “To by slo” > fi To by slo $

Shell jako programovací jazyk Po prvním řádku shell přechází na prompt druhé úrovně, v každé větvi struktury if – fi může být i více příkazů. $ if true > then echo “Prave je: “ > date > else > echo “Prave bylo: “ > date > fi Prave je Saturday Mar 31 08:44: $ $ cat kde.2 # vyhledani uzivatele echo “zadej jmeno uzivatele: read jmeno if who | grep $jmeno then echo -n "" else echo "$jmeno neni prihlasen" fi $ kde.2 zadej jmeno uzivatele: vdumek vdumek ttyq0 Mar 31 08:36 $

Shell jako programovací jazyk Příkaz test Slouží k vyhodnocení pravdivostní hodnoty výroku (existence souboru, hodnota proměnných, …). Existují dvě syntaxe, první používá samotné jméno příkazu test, druhá místo slova test používá hranaté závorky ([]), do kterých uzavírá přepínače a argumenty. test -přepínač argument [ -přepínač argument ] Závorky musí být z obou stran obklopeny mezerami (odlišení od použití při náhradě znaků v argumentech příkazů). $ if test $karel > then echo “karel existuje” > else echo “karel neexistuje” > fi $

Shell jako programovací jazyk Přepínače pro rozhodování na základě vlastností souborů test -f soubor vrací hodnotu true, pokud soubor existuje (není speciální, ani adresář) test -r soubor vrací hodnotu true, pokud soubor existuje a lze z něj číst test -w soubor vrací hodnotu true, pokud soubor existuje a lze do něj psát test -x soubor vrací hodnotu true, pokud soubor existuje a lze jej spustit test -d soubor vrací hodnotu true, pokud soubor existuje a je to adresář test -s soubor vrací hodnotu true, pokud soubor existuje a má nenulovou velikost

Shell jako programovací jazyk $ cat cp.safe # cp.safe soubor1 soubor2 # kopíruje soubor soubor1 do souboru soubor2 # pokud soubor2 existuje, ohlásí chybu if [ -f $2 ] then echo "cp.safe: soubor $2 existuje !" else cp $1 $2 fi $ Vícenásobné větvení if podmínka1 then příkaz1 elif podmínka2 then příkaz2 … elif podmínkaN then příkazN else příkazN fi

Shell jako programovací jazyk $ cat cp.safe.2 # cp.safe.2 soubor1 soubor2 # kopíruje soubor soubor1 do souboru soubor2 # pokud soubor2 existuje, ohlásí chybu if [ -f $2 ] then echo "cp.safe.2: soubor $2 existuje !" elif [ -f $2/$1 ] then echo "cp.safe.2: soubor $2/$1 existuje !" else cp $1 $2 fi $ Druhý argument může být i jméno adresáře

Shell jako programovací jazyk $ cat cp.safe.3 # cp.safe.3 soubor1 soubor2 # kopíruje soubor soubor1 do souboru soubor2 # pokud soubor2 existuje, ohlásí chybu if [ -f $2 ] then echo "cp.safe.3: soubor $2 existuje.\nprepsat? [A/N]" read prepsat elif [ -f $2/$1 ] then echo "cp.safe.3: soubor $2/$1 existuje.\nprepsat? [A/N]" read prepsat else cp $1 $2 fi if [ $prepsat = A ] || [ $prepsat = a ] then cp $1 $2 fi $ prikaz1 && prikaz2 prikaz 2 se provede, pokud prikaz1 skonci uspesne prikaz1 || prikaz2 prikaz 2 se provede, pokud prikaz1 skonci neuspesne

Shell jako programovací jazyk Operátor = slouží k porovnání shodnosti dvou řetězců, pro porovnání shodnosti celých čísel použijeme operátory: -eqvrací true, pokud jsou čísla shodná -nevrací true, pokud nejsou čísla shodná -gtvrací true, pokud je číslo za operátorem větší -ltvrací true, pokud je číslo před operátorem menší -levrací true, pokud je číslo před operátorem menší nebo rovno -gevrací true, pokud je číslo před operátorem větší nebo rovno Pro budování složitějších konstrukcí je možné používat unární operátor ! (negace výrazu), operátor logického součtu -o a logického součinu -a echo zadej prvni cislo: read prvni echo "zadej druhe cislo: " read druhe echo "zadej treti cislo:" read treti echo "zadej ctvrte cislo:" read ctvrte zadej prvni cislo: 5.45 zadej druhe cislo: 4.24 zadej treti cislo: 3.65 zadej ctvrte cislo: a 2. stejne nebo 3. > >= 3. if [ $prvni -eq $druhe ] || [ $treti -gt $ctvrte ] then echo "1. a 2. stejne nebo 3. > 4." fi if [ $prvni -ge $treti ] then echo "1. >= 3." else echo "1. < 3." fi

Shell jako programovací jazyk Příkaz exit Slouží k ukončení provádění scénáře. Je-li uveden argument, stává se stavovým příznakem, který vrací scénář shellu (doporučuje se zachovávat konvenci návratu 0 při úspěšném provedení) Příkaz expr Nástroj pro zpracování aritmetických výrazů. Argumenty bere jako aritmetické výrazy (pouze celočíselné, musí být odděleny mezerami), vyhodnocuje je a výsledek předává na standardní výstup. … read prepsat else cp $1 $2 || exit … $ expr $ expr / 3 3 $ expr `expr 1 + 7` / 3 2 $ pet=`expr 2 + 3` $ echo $pet 5 $

Shell jako programovací jazyk Příkaz case Další příkaz pro větvení, obecný formát: case slovo in vzor1) příkaz1 ;; vzor2) příkaz2 ;; … esac Provádí se postupné porovnání s jednotlivými vzory, je-li vzor shodný se slovem, provede se odpovídající příkaz. Jednotlivé vzory pro společný příkaz jsou odděleny znakem |. Ve vzorech se může používat i zástupných znaků *, ?, […], "…", '…', \ $ cat cp.safe.4 # cp.safe.4 soubor1 soubor2 # kopiruje soubor1 do soubor2 # pokud soubor2 existuje, řeší se to if [ -f $2 ] then echo "soubor $2 existuje! [p] prepsat [z] zmenit jmeno [n] neprepisovat" read prepsat elif [ -f $2/$1 ] then echo "soubor $2/$1 existuje! [p] prepsat [z] zmenit jmeno [n] neprepisovat" read prepsat else cp $1 $2 || exit fi case $prepsat in p|P) cp $1 $2 ;; z|Z) cp $1 $2. ;; esac

Shell jako programovací jazyk Příkazy pro iterace Operátor for for proměnná in seznam_hodnot do příkazy done proměnné jsou postupně přiřazovány hodnoty uvedené v seznamu_hodnot a pro každou hodnotu se provedou příkazy těla cyklu. Seznam hodnot je často tvořen jmény souborů. $ cat maz # script maze soubory v aktuálním # adresáři po interaktivním dotazu for soubor in * do echo "smazat $soubor? [A/N]" read odpoved case $odpoved in [aA]*) rm $soubor ;; esac done $ $ cat cyklusfor for cislo in 1 2 echo "Prubeh pro: $cislo" done $ cyklusfor Prubeh pro: 1 Prubeh pro: 2 $ $ cat cyklusfor1 for cislo in [1-2] echo "Prubeh pro: $cislo" done $ cyklusfor1 Prubeh pro: [1-2] $

Shell jako programovací jazyk $ cat cyklusfor2 for cislo in $* echo "Prubeh pro: $cislo" done $ cyklusfor2 a b c d e Prubeh pro: a Prubeh pro: b Prubeh pro: c Prubeh pro: d Prubeh pro: e $ $ exi1 1 parametr je vetsi, roven 0 vratim cislo 1 $ exi1 -5 parametr je mensi nez 0 vratim cislo -5 $ $ cat exi echo "vratim cislo $1" exit $1 $ $ cat exi1 if [ $1 -lt 0 ] then echo "parametr je mensi nez 0" echo `exi $1` else echo "parametr je vetsi, roven 0" echo `exi $1` fi $

Shell jako programovací jazyk Příkazy pro iterace Operátor while Jde o jakousi kombinaci příkazů for a if, kdy se o provedení iterace rozhoduje na základě vyhodnocení podmínky. Tělo cyklu je uzavřeno do konstrukcí do … done. while podmínka do příkazy done Podmínkou může být i provedení příkazu (úspěšné provedení - nulová hodnota - splněná podmínka) $ cat uz.je.pryc while who | grep vdumek > /dev/null sleep 60 done echo "uz sel k certu !!" $ /dev/null - soubor, který slouží k přesměrování rušivých výstupů, zaslaná data jsou ztracena. Script je potřeba spustit na pozadí (&), jinak by byl terminál blokován.

Shell jako programovací jazyk Příkazy pro iterace Operátor until Inverze operátoru while: until podmínka do příkazy done Příkazy těla cyklu se provádějí, pokud je podmínka nepravdivá. V podmínce cyklů while a until se často využívá příkaz test. Break, continue Slouží k ukončení cyklů. Break způsobí přechod na následující příkaz za done, fi, esac. Continue má za následek započetí nové iterace, aniž by se provedly příkazy za continue. $ cat uz.je.tady until who | grep vdumek > /dev/null sleep 60 done echo "Pozor, Dumek je tady !!" $

Shell jako programovací jazyk Funkce Shell umožňuje uživateli definici vlastních funkcí: jméno_funkce () {jméno_funkce () příkazy{ … příkazy } … } Jménem funkce může být libovolný řetězec, kulaté závorky oznamují shellu, že se jedná o definici funkce, mezi složenými závorkami jsou uvedeny příkazy, které má funkce vykonávat. $ cdl () { > cd $1 > echo -n "Adresar: " > pwd > ls -la | more > } $ $ cat u_cdl echo "Zadej jmeno adresare: " read adresar cdl $adresar $ Funkce se vyvolá svým jménem a případnými argumenty. Může být volána jak z příkazového řádku, tak ve scénáři. Shelovské funkce nelze exportovat. Řešením problému je operátor. (tečka), který zajistí spouštění argumentu v aktuální kopii shellu.

Shell jako programovací jazyk $ ucdl zadej jmeno adresare: /usr/people ucdl[3]: cdl: not found $. ucdl zadej jmeno adresare: /usr/people Adresar je: /usr/people total 64 drwxr-xr-x 12 root sys 4096 Feb 23 13:44. drwxr-xr-x 37 root sys 4096 Nov 15 12:38.. drwxr-xr-x 9 guest guest 4096 Jan guest drwxr-xr-x 17 heriban user 4096 Jan heriban drwxr-xr-x 3 jdvorak user 96 Apr jdvorak drwxr-xr-x 3 jroupec user 96 Nov jroupec drwxr-xr-x 9 sandera user 4096 May sandera drwxr-xr-x 94 root sys 4096 Feb 28 10:44 students drwxr-xr-x 11 vdumek user 4096 Apr 2 19:13 vdumek drwxr-xr-x 3 zbyzel user 88 Nov 5 13:58 zbyzel $

Shell jako programovací jazyk $ sh -x neni + who + grep root + echo root uz je pryc root uz je pryc $ $ sh -v neni while who | grep root > /dev/null do sleep 10 done echo "root uz je pryc" root uz je pryc $ Ladění scriptů -x průběh scénáře (+) -v podrobnější informace