AUTOMATIZACE ÚKONŮ SPRÁVY OPERAČNÍCH SYSTÉMŮ II. Ing. Petr Klimša

Rozměr: px
Začít zobrazení ze stránky:

Download "AUTOMATIZACE ÚKONŮ SPRÁVY OPERAČNÍCH SYSTÉMŮ II. Ing. Petr Klimša"

Transkript

1 AUTOMATIZACE ÚKONŮ SPRÁVY OPERAČNÍCH SYSTÉMŮ II Ing. Petr Klimša ORLOVÁ 2013

2 Název: Autor: Vydání: Počet stran: 67 Určeno pro projekt: Číslo projektu: Automatizace úkonů správy operačních systémů II Ing. Petr Klimša první Dílčí kvalifikace nástroj pro efektivní získání kvalifikace a cesta k rychlé změně kompetencí CZ.1.07/3.2.07/ Vydavatel: Gymnázium a Obchodní akademie, Orlová, p. o. Ing. Petr Klimša Gymnázium a Obchodní akademie, Orlová, p. o.

3 Obsah: Úvod A zpátky k shellu (Linuxový shell) Proměnné shellu Podmíněné příkazy Často používané proměnné Podmínky Porovnání výrazů příkaz test Podmíněné příkazy (podmínky) Cykly Cyklus for Cyklus while Cyklus until Dodatky: Skripty Shrnutí: Přehled programovacích nástrojů Regulární výrazy Přehled regulárních výrazů Závorkování regulárních výrazů Pravidla pro aplikaci regulárních výrazů Možnosti výběru logické OR Rozšířené regulární výrazy Nástroje grep, egrep, sed, awk a regulární výrazy grep a egrep sed awk Shrnutí: Kontrolní otázky: Základy jazyka C Základní charakteristika Datové typy char řetězec znaků Prázdný datový typ void

4 Celočíselné datové typy char, short int, int, long Reálná čísla float, double Logické datové typy Pole Vstup a výstup programu Parametry předané na vstupu programu Podmínky Cykly Knihovny v C a kompilace kódu Kompilace kódu Funkce v C Shrnutí: Kontrolní otázky: Základy jazyka Python Datové typy Řetězce znaků a operace s řetězci Prázdný datový typ Celá čísla a reálná čísla Logické datové typy Seznamy Slovník (hash; asociativní pole) Pole Vstup a výstup programu Parametry předané na vstupu programu Podmínky Cykly Funkce v Pythonu Moduly v Pythonu Přehled standardních modulů a některých jejich funkcí Tvorba vlastních modulů Shrnutí: Kontrolní otázky:

5 Úvod Právě jste otevřeli studijní materiál, který vám má usnadnit studium široké oblasti programování skriptů v Linuxu. Účelem tohoto studijního materiálu je poskytnout základní přehled o možnostech programování, s kterými se jako správce operačního systému můžete setkat, a poskytnout vám úvodní vhled do problematiky. Studijní materiál se zabývá tvorbou skriptů v shellu Bash, základy jazyka C a Python. Je ovšem nutné vás upozornit, že se opravdu jedná jen o základy, které je nutné rozšiřovat dalším studiem. Vzhledem k provázanosti jednotlivých témat bych vám doporučil, abyste při čtení nespěchali a pokud to jen půjde, tak abyste si procvičovali teorii praxí. A právě vzhledem k vzájemné provázanosti témat, pojmů a principů fungování bych vám určitě doporučil se vracet k již prostudovaným kapitolám nebo používat další literaturu. Uvidíte, že při každém dalším čtení vám budou probírané pojmy jasnější. Autor 3

6 POUŽÍVANÉ SYMBOLY Průvodce studiem vstup autora, doplnění textu Informace co se v kapitole dovíte Klíčová slova Čas potřebný ke studiu kapitoly Důležité pojmy nebo početní vztahy Příklad objasnění problematiky nebo řešený příklad Úkol k zamyšlení nebo cvičení Otázky a úkoly řešení najdete v rámci opory Řešení úkolů vážou se na konkrétní úkoly a otázky Část pro zájemce rozšíření látky, pasáže jsou dobrovolné Shrnutí shrnutí látky, shrnutí kapitoly Literatura Korespondenční úkol 4

7 1. A zpátky k shellu (Linuxový shell) Klíčové pojmy: shell, speciální znaky (metaznaky), proměnné shellu, astributy proměnných, skript, interaktivní skript, argumenty (parametry) skriptu, spouštění skriptu, podmínky a podmíněné příkazy, příkazy cyklu. Jestli se ptáte, proč takový podezřelý název kapitoly, tak to souvisí s tím, že základní informace o Shellu jsou uvedeny v opoře Instalace a konfigurace operačního systému Linux, na kterou opora, již právě začínáte číst, navazuje. Vím, že celá opora se má zabývat skriptování v Linuxu, ale dříve než se začnete věnovat samotnému skriptování, je potřeba rozšířit vaše dosavadní znalosti o Shellu a základních příkazech. Proč? Protože skriptování je vlastně seskupování příkazů do jednoho souboru a abyste mohli efektivně vytvářet skripty, měli byste zvládnout Shell, pro který budete skripty vytvářet. Uvidíte, že už i v této kapitole začnete se skriptováním, protože budete zapisovat příkazy, které pak jen ve skriptech zřetězíte. Shell je rozhraní pro komunikaci s uživatelem (pracovní prostředí). Můžete se setkat s rozdělení shlellů na: interaktivní shell zpracovává příkazy zadané ze standardního vstupu uživatelem, tzn. obvykle z klávesnice ( příkazy zadané v příkazové řádce). neinteraktivní shell zpracovává příkazy ze souboru (používá se k vykonání skriptu) Skript je posloupnost příkazů skriptovacího jazyka uložená v souboru. Podle použitého jazyka (případně interpreteru) se můžete setkat s shellovými skripty, PHP skripty, ASP skripty apod. Skripty jsou, na rozdíl od zkompilovaných programů, čitelné, takže pokud znáte daný jazyk, můžete s větší či menší námahou určit, co má daný skript dělat. V Linuxu se používá celá řada shellů (asi nejpoužívanějším je shell Bash): sh (Bourne shell) bash (Bourne again shell) csh (C shell) tcsh (TENEX C shell) ksh (Korn shell) a řada dalších. Zadávání příkazů: na jeden řádek je možné napsat více příkazů za sebou oddělených středníkem příkazy jsou pak vykonány tak, jak byly zapsány za sebou a jednotlivé příkazy jsou spuštěny až po ukončení předchozího příkazu clear; pwd;ls -l more; středník, mezera, ampersand (&) patří mezi tzv. metaznaky a nejsou shellem předávány jako argument programu, protože slouží ke specifikaci příkazů. oba metaznaky (středník i ampersand) ukončují příkazy. Pokud napíšete příkaz a neukončíte jej ani ampersandem ani středníkem, systém si to vyloží jako by byl ukončen středníkem. & zajišťuje spuštění příkazu na pozadí 5

8 chcete li spustit více příkazů na pozadí, pak zadejte: pwd & ls & ampersand ukončuje příkaz pwd a zároveň říká, že má být spuštěn na pozadí Mezi další metaznaky patří >, >>, <, <<, které jsou používány k přesměrování výstupu Zástupné (speciální) znaky zástupný znak popis ~ domovský adresář aktuálně přihlášeného uživatele ~jméno domovský adresář uživatele jméno (např. ~petr označuje domovský adresář uživatele petr)? jeden libovolný znak * libovolný počet libovolných znaků \znak právě jeden konkrétní znak [množina] libovolný znak z množiny znaků Je li přihlášen uživatel petr, pak příkaz cd ~/dokumenty je chápán jako příkaz cd /home/petr/dokumenty. Potřebujete li z nějakého důvodu použít například v názvu souboru speciální znak např. hvězdičku tak, aby jej systém chápal jako normální nikoli zástupný znak, zadejte před takový znak zpětné lomítko. Podívejte, jak je na obrázku použita hvězdička. V prvním případě je chápána jako zástupný znak, takže systém vypsal jména všech soborů v adresáři, kdežto v druhém případě systém pochopil, že má vypsat (dáno příkazem echo) znak hvězdička na obrazovku. Zpětné lomítko si proto představte jako přepínač, který ze speciálních znaků dělá obyčejné a z obyčejných speciální (např. \n je znak pro nový řádek). V Linuxu má svůj speciální význam také použití apostrofů a uvozovek. apostrofy všechno mezi apostrofy je bráno jako obyčejný text, tedy i speciální znaky apostrofy je vhodné použít právě pro text obsahující speciální znaky obrácené apostrofy `` umožňují výsledek jednoho příkazu vložit do druhého příkazu. Podívejte se na následující obrázek v části o uvozovkách. uvozovky vypínají nahrazování jmen (souborů, adresářů apod.), ale ponechávají funkční příkazy pro historii, proměnné, obrácené apostrofy a zpětné lomítko Předání argumentů mezi procesy Výstup jednoho procesu je vstupem druhého procesu a proces je vykonán, až jsou vygenerovány všechny jeho argumenty. Podívejte se na příklad na obrázku. 6

9 Příkaz echo vypíše zadané argumenty na standardní výstup (obvykle obrazovku). Příkaz echo, jehož úkolem je vypsat zprávu na obrazovku, není spuštěn dříve, než se dozví informace z procesu date a whoami. Pokud chcete upravit výstup příkazu na obrázku o smazání obrazovky a pár prázdných řádků, postačí jen příkaz upravit: clear; echo; echo; echo Ahoj, dnes je $(date) a jsi prihlasen jako $(whoami) Poznámka: předání výstupů mezi procesy lze provést místo závorek i pomocí apostrofů, ale ve složitějších příkazech to může být nepřehledná, proto raději použijte zde uvedený způsob pomocí závorek. Př.: cp $( find. - type f -name dopis* ) ~/zaloha Nejdříve systém vyhledá v aktuálním adresáři všechny soubory, jejichž jméno začíná slovem dopis a předá je jako vstup příkazu cp, který zkopíruje vyhledané soubory do podadresáře zaloha v domovském adresáři aktuálně přihlašeného uživatele 1.1. Proměnné shellu každá proměnná má svoje jméno, atributy a obsah (hodnotu) pozor, shell nerozlišuje, na rozdíl od programovacích jazyků, datové typy proměnných. Všechny proměnné jsou řetězec znaků, což s sebou přináší výhodu, že proměnné není nutné deklarovat, ale také nevýhodu, že nelze jednoduše porovnávat hodnoty proměnných mezi sebou. V shellu se vyskytují 3 typy proměnných (neplést s datovými typy, který, jak jsme si již řekli, je jen jeden): 1) vnitřní proměnné shellu jejich inicializaci a naplnění se stará shell sám obvykle jsou jen ke čtení 2) uživatelské proměnné definované uživatelem názvy jsou složeny z písmen a čísel (alfanumerické znaky) 3) proměnné speciálního významu uchovávají informace o běžících procesech, předávaných argumentech apod. názvy proměnný jsou ze speciálních znaků obvykle je uživatel nemůže upravit (jejich hodnoty jsou jen ke čtení) Přiřazení hodnoty proměnné inicializace proměnné a její naplnění hodnotou se provádí pomocí znaku = názvy proměnných se zapisují velkými písmeny platí to, na co jste zvyklí z většiny programovacích jazyků, že na levé straně je proměnná a na pravé straně hodnota proměnné. Přiřazení se provádí: PROMENNA=hodnota tzn., že do proměnné PROMENNA se přiřadí uvedená hodnota (JMENO=petr). JMENO $JMENO označuje proměnnou označuje hodnotu uloženou v proměnné JMENO 7

10 Př.: pokud není hodnota proměnné uvedena, shell to chápe jako pokyn k odstranění proměnné daného jména do proměnné je možné přiřadit výstup příkazu. Například do proměnné DATUM se vloží jako hodnota výstup příkazu date: DATUM=$(date) $proměnná ${ proměnná } ${ proměnná - výraz } ${ proměnná = výraz } ${ proměnná + výraz } hodnota proměnné hodnota proměnné, přičemž složené závorky slouží pro oddělení názvu proměnné od okolí (pro přehlednost) v případě, že je proměnná definována, je výsledkem její hodnota, ale v případě, že proměnná není definována, je výsledkem výraz a proměnná zůstává nedefinována v případě, že je proměnná definována, je výsledkem její hodnota, ale v případě, že proměnná není definována, je proměnná nadefinována a výraz je zapsán jako hodnota proměnné od této chvíle existuje proměnná s hodnotou obsazenou ve výrazu. Je li proměnná definována, je vrácena hodnota výraz, ale v případě, že proměnná není definována, není vrácena žádná hodnota. atributy proměnných Mezi atributy proměnných patří: viditelnost (děditelnost) neměnitelnost viditelnost (děditelnost): platí, že proměnné použité v jednom shellu se nepředávají do druhého shellu (proměnné a jejich hodnoty vytvořené v jednom shellu nejsou dostupné z vnořeného shellu (vnořeným shellem se rozumí shell, který byl spuštěn z jiného shellu). Na obrázku vidíte, že z shellu je spuštěn pomocí příkazu bash další šel, a v něm není definována proměnná POZDRAV. V nadřazeném shellu má proměnná POZDRAV hodnotu ahoj. Spuštění nového shellu bash. V podřízeném shellu nemá proměnná POZDRAV definovanou hodnotu. Pozn. shell ukončíte příkazem exit 8

11 Aby proměnné byly dostupné z vnořených shellů, musí se zviditelnit pmocí příkazu export. V podřízeném shellu má proměnná POZDRAV, která byla v nadřazeném shellu exportována, viditelnou hodnotu ahoj Příkaz export provede přenesení proměnné a její hodnoty i do vnořených shellů. Tzn., že proměnná se stane viditelná. Změna hodnoty proměnné ve vnořeném shellu se neprojeví v shellu nadřazeném. Změna v nadřazeném shellu se ale projeví ve vnořeném shellu. V nadřazeném shellu má proměnná pozdrav hodnotu ahoj. Otevření podřízeného shellu V podřízeném shellu má proměnná hodnotu ahoj. Následně je v podřízeném shellu hodnota změněna. Návrat do původního nadřazeného shellu. V nadřazeném shellu zůstala hodnota proměnné na původní hodnotě ahoj. Proměnné lze exportovat z nadřazeného shellu do podřízeného, ale opačně ne. Chcete li, aby se určité proměnné dědily do podřízeného shellu pokaždé, když se uživatel přihlásí, exportujte tyto proměnné v některém z inicializačních skriptů (~/.profile apod.). neměnitelnost: slouží k tomu, aby proměnná byla jen ke čtení (není možné změnit její hodnotu) k nastavení atributu proměnné na jen ke čtení slouží příkaz readonly uvedený před názvem proměnné nastavení proměnné jen ke čtení platí jen v daném shellu a nepřenáší se do vnořených shellů. jakmile je proměnná nastavena na jen ke čtení, není možné tento atribut odvolat. Proměnnou pak nelze odstranit a zanikne až ukončením shellu proměnné speciálního významu Jedná se o proměnné (uvedené v tabulce), které jsou jen ke čtení a jejich hodnoty mění samotný shell. Jsou označeny speciálními znaky. speciální obsahují hodnoty o proměnná $$ PID shellu $! PID posledního procesu spuštěného na pozadí $? návratová hodnota posledního dokončeného procesu celočíselná hodnota (obvykle popsaná v manuálový stránkách 9

12 daných programů) hodnota 0 znamená, že proces proběhl bez chyb Arimtmetické oprace v Shellu aritmetické operace mají tvar: $[výraz] Podmíněné příkazy k podmíněnému řízení příkazů se používá návratová hodnota uložená ve speciální proměnné $? využívají se metaznaky && a, které se používají ve tvaru: příkaz1 && příkaz2 příkaz1 příkaz2 příkaz2 je vykonán, jestliže návratová hodnota příkazu 1 je nula (neboli příkaz2 je vykonán, jestliže příkaz1 proběhl bez chyb) příkaz2 je vykoná, je li návratová hodnota příkazu1 <>0 (neboli jestliže příkaz1 skončil s chybou, je vykonán příkaz2) V Linuxu existují dva programy (příkazy), které mají vždy stejnou a předem definovanou návratovou hodnotu. Jsou to příkazy true a false. False má vždy návratovou hodnotu 1 (tzn. chybu) a příkaz true vrací vždy návratovou hodnotu 0 (tzn. bez chyb). Př.: mkdir zaloha && cd zaloha Příkaz2 (cd zaloha) se provede pouze v případě, že příkazu mkdir se povedlo vytvořit nový adresář záloha Př.: mkdir zaloha echo nemohu vytvořit adresar zaloha Pokud příkaz mkdir zaloha skončí s chybou, je vypsaná zpráva nemohu vytvorit adresar zaloha. Všimněte si, že schválně není použito hlášení adresář již existuje, protože příčin, proč uživatel nemůže vytvořit adresář, může být více - např. uživatel nemá potřebná oprávnění. Když se pozorně podíváte na předchozí obrázek, zjistíte, že se vypsala 2 hlášení. Co podniknete, abyste zajistili, že se systémové hlášení nebude vypisovat? Pošlete je do zařízení null, které slouží k zahození toho, co nechceme. K podmíněnému řízení příkazů můžete pomocí metaznaků && a zřetězit více příkazu za sebou. Vyhodnocování pak probíhá zleva doprava. 10

13 Protože jsme nepřesměrovali systémové hlášení na zařízení /dev/null, objevilo se na obrazovce. Protože je použit metaznak && vykoná se příkaz cd zaloha pouze v případě, že příkaz mkdir vrátí návratovou hodnotu 0, tzn., bude úspěšný ve vytvoření adresáře zaloha. Protože je použit metaznak &&, příkaz cd zaloha1 se vykoná pouze v případě, že příkaz mkdir zaloha1 byl úspěšný Protože je použit metaznak, vykoná se příkaz mkdir zaloha1 pouze v případě, kdy v proměnné $? bude uložena jiná hodnota než 0 (tzn. předchozí příkaz skončil s chybou). A protože příkaz mkdir zaloha skončil s chybou a příkaz cd zaloha se ani nevykonal, je ve speciální proměnné $? hodnota 1. Proto se vykoná příkaz mkdir zaloha Často používané proměnné S některými často používanými proměnnými shellu jste se již seznámili ve sbírce Instalace operačního systému a jeho konfigurace II. Linux. Nyní je o některé doplníme a ukážeme si pár příkladů s použitím právě nabytých znalostí o proměnných. CDPATH seznam adresářů oddělených dvojtečkou, který systém použije, jestliže selže příkaz cd. HISTFILE název souboru, v němž je zapsán seznam naposledy použitých příkazů. Defaultně se jedná o soubor ~/.bash_history HISTFILESIZE počet řádků (příkazů), které systém udržuje v souboru s historii příkazů HISTSIZE počet příkazů, které shell udržuje v paměti a můžete je vyvolat pomocí šipek na klávesnici HOME cesta k domovskému adresáři Př.: Zjistěte, v kterém souboru se uchovávají příkazy, které aktuálně přihlášený uživatel použil. Příkazy vypište Příkaz echo vypíše z proměnné HISTFILE cestu k souboru s historií příkazů a tato cesta je pak předána jako vstupní argument příkazu cat. Protože příkazů může být více, je zajištěno pomocí příkazu more, že se budou vypisovat po stránkách. Př. Zjistěte, kolik příkazů systém udržuje v paměti. Změňte tuto hodnotu na 10. echo $HISTSIZE; HISTSIZE=10 Nezapomeňte, že pokud změníte hodnotu proměnné, platí tato změna jen po dobu aktuálního sezení. Tzn. po novém přihlášení bude na původní hodnotě. Chcete li hodnoty proměnných změnit trvale, musíte provést jejich změnu v inicializačních skriptech shellu (buď pro všechny uživatele nebo pro příslušného uživatele). HOSTNAME jméno počítače HOSTTYP architektura počítače LC_ALL definuje národní prostředí. Hodnota této proměnné překrývá nastavení ostatních proměnných s názvem LC_ a slouží k natavení lokálních zvyklostí jak jazyk, datum, čas apod. MAIL cesta k souboru s poštou 11

14 PATH seznam adresářů oddělených tečkou, v kterých systém hledá zadaný příkaz PWD obsahuje hodnotu aktuálního adresáře RUNLEVEL číslo úrovně běhu, v němž se systém nachází RANDOM proměnná jejíž hodnota je pseudonáhodné číslo. Při každém výpisu hodnoty vrátí z generátoru náhodných čísle jiné číslo. SHLVL úroveň vnoření shellu. Po přihlášení má shell úroveň 1. Po přihlášení je úroveň vnoření shellu =1 Spuštění dalšího shellu Bash. Jeho úroveň vnoření = 2. Po ukončení vnořeného shellu jsme opět v úrovni vnoření =1. TERM nastavení emulace terminálů UID UID aktuálně přihlášeného uživatele USER username aktuálně přihlášeného uživatele Pokud přemýšlíte, jak zjistit seznam proměnných, které jsou v shellu vytvořeny, pak existuje jednoduchý způsob: zadejte příkaz echo znak $ a dvakrát zmáčkněte klávesu tabulátor. Systém se vám bude snažit nabídnout ke znaku $ pokračování a vypíše vám seznam existujících proměnných Podmínky Porovnání výrazů příkaz test Pro porovnání výrazů se používá příkazy test a příkaz [], které mají stejný význam a provedou porovnání: dvou řetězcových hodnot dvou celočíselných hodnot vlastností souborů (stáří, typ souborů apod.) Výsledkem porovnání výrazu je návratová hodnota nula nebo jedna, která je uložena ve speciální proměnné $?. Návratová hodnota nula je vrácena, jestliže je výraz pravdivý, a jednička, jestliže je výraz nepravdivý. 12

15 Operátory pro porovnání řetězců řetězec délka řetězce není nulová (je nenulová) -z řetězec délka řetězce je nulová řetězec1 = řetězec2 řetězce jsou shodné řetězec1!= řetězec2 řetězce se nerovnají (jsou různé) Operátory pro porovnání číselných hodnot hodnota1-eq hodnota2 hodnoty jsou shodné hodnota1-le hodnota2 hodnota1 je menší nebo rovno než hodnota2 hodnota1-lt hodnota2 hodnota1 je menší než hodnota2 hodnota1 -ge hodnota2 hodnota1 je větší nebo rovno než hodnota2 hodnota1 -gt hodnota2 hodnota1 je menší než hodnota2 hodnota1 -ne hodnota2 hodnoty se nerovnají Často se testování řeší tak, že se nepoužívá příkaz test, ale pouze hranaté závorky. Pozor mezi hranatými závorkami a samotným výrazem musí být mezery! Mezi výrazem a hranatými závorkami musí být mezera. Provádí se testování, zda zapsaný výraz je pravdivý (tj. zda řetězce jsou stejné). Protože výraz je pravdivý (řetězce jsou stejné), je výsledkem testu návratová hodnota 0. Ještě častěji se testování a výpis hodnoty návratové proměnné zadávají z důvodu přehlednosti na jednom řádku. Když si na to zvyknete, nezapomenete zadat v případě, kdy to potřebujete, zapsat příkaz k vypsání návratové hodnoty. Výše uvedené příklady byly více méně bez praktického použití. Proč také zadávat, aby nám Linux porovnal, zda řetězec abc je stejný s řetězcem abcd. To víme, že není. Podívejte se na následující příklad, ve kterém potřebujete zjistit, zda se systém právě teď nachází v domovském adresáři uživatele. [ $(pwd) = $HOME]; echo $? Vrátí hodnotu aktuální pozice (v kterém adresáři se nacházíme) Vrátí cestu k domovskému adresáři aktuálně přihlašeného uživatele. Vypíše výslednou hodnotu porovnání Porovná, zda jsou řetězce (v tomto případě dvě cesty k adresářům) stejné. Protože se uživatel aktuálně nachází v kořenovém adresáři, vrátí porovnání přítomnosti v domoském adresáři hodnotu 1, čili nepravda. Uvedený příklad můžete ještě upravit například takto: [ $(pwd) = $HOME]; echo Nejste v domovskem adresari Pro testování vlastností souborů se používají operátory uvedené v následující tabulce. Nezapomeňte, že i adresář je vlastně soubor, takže jej pomocí operátorů uvedených v tabulce můžete testovat také. 13

16 Operátory pro testování vlastností souborů (adresářů) soubor1 -ef soubor2 oba soubory sdílejí stejný i node soubor1 -nt soubor2 soubor1 je novější než soubor2 soubor1 -ot soubor2 soubor1 je starší než soubor2 -e soubor soubor existuje -d soubor soubor existuje a je adresář -f soubor soubor je obyčejný soubor -L soubor soubor je symbolický odkaz -r soubor soubor je čitelný (je k němu oprávnění read) -s soubor soubor není prázdný (má velikost větší než 0) -w soubor soubor je zapisovatelný -x soubor soubor je spustitelný Na následujícím obrázku si můžete prohlédnout, jak se testuje, zda objekt zaloha v aktuálním adresáři je nebo není adresář. Pro řadu programátorů zvyklých na použití podmínek ve tvaru if.. then..else může být zápis pomocí hranatých závorek a zřetězení příkazů méně přehledný. V takovém případě můžete použít klasických struktur příkazu if, o němž se dozvíte v následující části. Testované výrazy lze spojovat pomocí logických spojek AND a OR, k čemuž můžete použít následující parametry. Logické operátory -a spojí 2 testy pomocí AND -o spojí 2 testy pomocí OR Podmíněné příkazy (podmínky) slouží k podmíněnému vykonání příkazů obecná syntaxe: if.. then else ukončení podmínky se provádí pomocí fi návratová hodnota je 0 (true) nebo 1 (false) Syntaxe a použití příkazu if if výraz; then příkazy; fi jestliže platí výraz, vykonej příkazy if výraz; then příkazy1;else příkazy2; jestliže platí výraz, vykonej příkazy1, jinak fi vykonej příkazy2 if výraz; then příkazy1;podmínky; fi jestliže platí výraz, vykonej příkazy, jinak kde podmínky se zadávají ve tvaru: plat li podmínka, vykonej její příkazy, jinak elif výraz; then příkazy;elif platí li podmínka, vykonej její příkazy Všimněte si, že za výraz a příkazy se vkládají středníky. Dejte si na tuto skutečnost pozor, ať se zbytečně netrápíte při hledání chyby, proč podmínka nefunguje. Použití příkazu if si ukážeme na jednoduchých příkladech. Všechny následující příklady budou vycházet ze situace na obrázku, kde si všimněte, že: soubor1 je prázdný (má nulovou velikost), kdežto soubor2 obsahuje data o velikosti 4B. 14

17 adresář pokus1 je prázdný, kdežto pokus2 obsahuje ještě soubor3. Všimněte si ale, že přestože v adresáři pokus1 nejsou uloženy žádné soubory nebo podadresáře, je jeho velikost 4KB. Př. Vytvořte skript testuj, který příjme jako vstupní parametr jméno adresáře a pokusí se přejít zadaného adresáře. Pokud se mu to nepovede, vypíše zprávu Nelze vstoupit do adresáře, v opačném případě zahlásí úspěch. Přesměruje chybové hlášení, aby systém v případě, že zadaný adresář neexistuje, neobtěžoval vlastním hlášením. Vstupní argument (jméno adresáře) Jiný způsob zápisu příkazu test. Pozor na mezeru mezi výrazem a hranatými závorkami!!! Př. Vytvořte skript testuj2, který jako vstupní parametr přijme název objektu v aktuálním adresáři a zjistí, zda daný objekt v aktuálním adresáři existuje a zda je adresář nebo soubor. V případě, že objekt neexistuje, vypíše o tom zprávu. Poznámka: Nezapomeňte, že vše v Linuxu je soubor! Použitím kulatých závorek si neuškodíte, spíše si zápis zpřehledníte. #!/bin/bash #!/bin/bash cd $1 2>/dev/null if [ $? = 0 ]; then echo Prechod do adresare $1 je mozny; else echo Nelze vstoupit do adresare $1; fi if (test -e $1); then if (test -d $1); then echo Objekt $1 je adresar.; else echo Objekt $1 neni adresar.; fi; else echo Objekt $1 neexistuje.; fi Porovná návratovou hodnotu naposledy provedeného příkazu (uloženou v proměnné $?), což byl příkaz cd $1. Pokud byl příkaz úspěšný, tzn., že se povedlo vstoupit do adresáře, tak vrátil hodnotu 0. Parametry příkazu test: -e vrací true (0), jestliže soubor existuje -d vrací true (0), jestliže se jedná o adresář Vnořená podmínka. Adresář pokus1 na rozdíl od adresáře pokus existuje. 15

18 Př. Napište skript, který zjistí, zda zadaný soubor existuje a je prázdný. Pro zjišťování existence souboru (nezapomeňte, že v Linuxu je i adresář soubor) můžete využít parametrů příkazu test: e vrací hodnotu true, jestliže soubor existuje s vrací hodnotu true, jestliže soubor není prázdný Příkaz test s parametrem -s vrací #!/bin/bash hodnotu true (0) jestliže není prázdný. if (test -e $1); then if (test -s $1); then echo Objekt $1 neni prazdny.; else echo Objekt $1 je prazdny.; fi; else echo Objekt $1 neexistuje.; fi Vnořená podmínka. Další možnou variantou téhož příkladu je otočit logiku příkazu test a provést negaci výsledného parametru s, který vrací true v případě, že soubor není prázdný. #!/bin/bash if (test -e $1); then if (test! -s $1); then echo Objekt $1 je prazdny.; else echo Objekt $1 neni prazdny.; fi; else echo Objekt $1 neexistuje.; fi Příkaz test s negovaným -s vrací hodnotu true (0) jestliže je prázdný. Vnořená podmínka. Poznámka: Všimněte si, že v případě adresářů má adresář pokus1, ve kterém nejsou žádné soubory, velikost 4KB. Z toho plyne, že tento způsob ověřování nemůžete použít na adresáře. 16

19 Další možností řešení tohoto zadání je spojení podmínek pomocí logického operátoru AND, k čemuž slouží parametr a příkazu test. #!/bin/bash if (test -e $1 -a -s $1 ); then echo Objekt $1 neni prazdny.; fi if (test -e $1 -a! -s $1 ); then echo Objekt $1 je prazdny.; fi if (test! -e $1); then echo Objekt $1 neexistuje.; fi Psaní podmínek a zejména pak testování výrazů je pro začátečníka přehlednější použitím příkazu if then else. Zápis lze ale zjednodušit (to je myšleno opravdu jako ironie). Podívejte se na následující příklad. Př. Napište skript, který v případě, že nebude existovat adresář pokus1 a ani pokus2, vytvoří adresář pokus3. Pozor na záludnost češtiny. V tomto případě se myslí, že neexistuje li pokus 1 a zároveň neexistuje li pokus2, má se vytvořit pokus3. V takovémto případě by podmínka mohla být formulována takto: if (test! -d pokus1 -a! -d pokus2); then mkdir pokus3; fi Využívá se parametru d, který vrátí hodnotu true, jestliže objekt existuje a je to adresář. Jinou formou tohoto zápisu může být: [ test! -d pokus1 -a! -d pokus2 ] mkdir pokus3 Tzv. vícenásobné větvení příkaz case příkaz case slouží k vykonání příkazu za podmínky shody vstupního slova se vzory slov jedná se o podmínku použitelnou v případě většího množství voleb Syntaxe a použití příkazu case case slovo in vzory_slova) příkazy;;vzory_slova) příkazy;;esac Př. Vytvořte skript, který načte jméno a porovná jej se seznamem jmen, pro příslušné jméno pak vykoná nějakou akci. Pozor, příkazy jsou #!/bin/bash ukončeny 2 středníky! echo -n Zadej jmeno: ; read JMENO; case $JMENO in petr) echo Vykonavam prikazy pro volbu $JMENO;; pavel) echo Vykonavam prikazy pro volbu $JMENO;; jan) echo Vykonavam prikazy pro volbu $JMENO;; *) echo Pro toto zadane jmeno: $JMENO, nemam co nabidnout;; esac Ve všech ostatních případech, které neodpovídají výše uvedenému seznamu 17

20 1.3. Cykly v shellu se používají příkazy cyklu: o for o while o until cykly je možné vnořovat Mějte na paměti, že z hlediska daného shellu jsou všechny proměnné globální. Ať se vám nestane, že některým přiřazením přepíšete hodnotu, která je využívána například právě cyklem. Představte si, že v cyklu budete používat proměnnou POČET. for POCET in 1 2 3; do echo počet je: $POCET; done Pokud by měla proměnná POČET jinou hodnotu, tak spuštěním cyklu ji už nemá, ale bude postupně mít hodnotu 1, pak 2 a pak 3, takže ať v proměnné POČET bylo před spuštěním cyklu cokoli, je tam po jeho skončení hodnota Cyklus for Syntaxe: for index-seznamu in seznam do příkazy; done Proměnná index seznamu nabývá při každém průchodu cyklem hodnotu ze seznamu. Seznam je možné definovat různými způsoby. Například: výčtem prvků seznamu: nebo petr karel emil seznamem získaným jako výsledek z provedení příkazu ls, cat apod. * doplní seznam všech souborů v aktuálním adresáři. Stále myslete na to, že vše je soubor. Pozor, použití * k definování seznamu se netýká skrytých souborů, ty nejsou do výpisu zahrnuty. *.txt provede pro seznam všech souborů v aktuálním adresáři, jejichž název (přípona) končí na.txt. seznam prvků z proměnné v shellu tcsh je příkaz foreach cyklus for se často používá pro hromadné přejmenování souborů protože v daném shellu jsou proměnné použité v cyklu globální, musí být v případě vnořených cyklů použity jiné proměnné, jinak se budou vzájemně přepisovat. Př. Předpokládejte, že máte v adresáři soubory dopis1.txt, dopis2.txt až dopis5.txt. Vytvořte skript pro zálohu všech souborů, které začínají zadaným jménem. Záloha bude označena příponou bak. 18

21 #!/bin/bash for cislo in do cp $1$cislo $1$cislo.bak done ls *.bak Doplní jméno zadané jako argument skriptu a doplní jej postupně o příslušné číslo ze seznamu. Př. Napište interaktivní skript, který se uživatele zeptá na seznam souborů (jmen apod.). Tento seznam uloží do proměnné seznam a následně vypíše jednotlivé soubory. #!/bin/bash echo -n Zadejte seznam souboru oddelenych mezerou: read seznam echo; echo Bylo zadano: for soubor in $ seznam do echo $soubor done Př. Napište skript, který seznam pro příkaz for získá ze souboru. Všimněte si, jak je předán cyklu for výsledek provedení příkazu cat! #!/bin/bash for soubor in $(cat soubory) do echo $soubor done Obsah souboru soubory Pokud byste zadali toto: for soubor in cat soubory, dostali byste: Shell by totiž pochopil, že se jedná o seznam, jehož prvky tvoří cat a soubory. Podívejte se některé další skripty a jejich výsledek. Všímejte si rozdílů. 19

22 Př. Podívejte se, jaké výsledky získáte, pokud zadáte do seznamu pro for * nebo příkaz ls. Vypíše seznam všech souborů a adresářů v aktuálním adresáři (netýká se skrytých). #!/bin/bash for soubor in * do echo V adresari je: $soubor done V tomto případě nechápe ls jako příkaz, ale jako položku v seznamu. Viz. už výše uvedený příklad s příkazem cat. #!/bin/bash for soubor in ls do echo V adresari je: $soubor done Tento způsob zajistí, že výsledek příkazu ls se předá jako vstup do seznamu příkazu for. #!/bin/bash for soubor in $(ls) do echo V adresari je: $soubor done Všimněte si, co se provedlo, jestliže jste zadali příkaz ls s parametrem -l. Jednotlivé řádky dlouhého výpisu příkazu ls se rozsekaly na samostatné položky pro vstup příkazu for. #!/bin/bash for soubor in $(ls -l) do echo V adresari je: $soubor done Zamyslete se nad dalšími způsoby zápisu cyklu for for seznam in $@ for seznam in $(find /* -name \*.txt) 20

23 for seznam in Toto je seznam, ktery mam for seznam in Zde bude vypisovat \* ve vete. for seznam in Zde bude vypisovat * ve vete. for seznam in Zde bude vypisovat * ve vete. Jak jednoduché a užitečné může být použití příkazu for, kterému předáte seznam souborů, s kterými chcete pracovat, pro správu systému si ukážeme na následujícím příkladu. Potřebujete například provést změnu oprávnění v adresáři a jeho podadresářích na hodnotu 400 pro všechny soubory, jejichž vlastníkem je uživatel Petr (pouze pro soubory vlastněné Petrem). #/bin/bash for soubor in $(find. -user petr) do chmod 400 $soubor done Když se nad tím zamyslíte, tak takto můžete provést změnu oprávnění pro vybrané uživatele jen tím, že výše uvedenému kódu dáte jako vstupní seznam jména uživatelů, kterých se to má týkat. 21

24 Využití syntaxe jazyka C Pro příkaz for v shellu je možné použít i syntaxi jazyka C a využít tak jeho možností. Obecná syntaxe je: for ((nastavení_počáteční_hodnoty_proměnné; podmínka; krok)) for ((i = 1; i < 10; i++)) do echo $i done for ((i = 10; i > 0; i--)) do echo $i done Vhodné je například použití pro opakování v určitém, předem známém počtu opakování. Př. Napište skript, který ze vstupních argumentů skriptu načte slovo a počet, který určí, kolikrát se má slovo vypsat na obrazovku. Zadané slovo pak vypíše ve tvaru 1. slovo, 2. slovo atd. #!/bin/bash echo -n Zadejte slovo: ; read slovo; echo -n Zadejte maximalni pocet: ; read pocet; for ((cislo = 1; cislo <= $pocet; cislo++)) do echo $cislo. $slovo done Cyklus while cyklus s podmínkou na začátku; je li výraz pravdivý, jsou vykonány příkazy v těle cyklu; tzn., dokud platí podmínka, dělej. k okamžitému ukončení cyklu slouží příkaz break k přeskočení zbytku cyklu a pokračování novým porovnáním slouží příkaz continue Syntaxe: while výraz do příkazy; done Př. Vytvořte skript, který načte číslo z klávesnice a bude vypisovat číslo snížené o jedničku tak dlouho, dokud bude číslo větší než 0. #!/bin/bash echo -n Zadejte cislo: ; read cislo; while (test cislo -gt 0) do 22

25 echo $cislo cislo=$[ $cislo - 1 ] done Dejte si pozor na to : že příkaz test nepoužívá znaky <> ale operátory lt, gt apod. jak se zadává aritmetický výraz pro změnu hodnoty proměnné cislo Cyklus until dokud není splněna podmínka, vykonávej příkazy v těle cyklu. tzn., příkazy v těle cyklu jsou vykonány, dokud je podmínka false (navratový kód je různý od nuly). Syntaxe: until výraz do příkazy; done Př. Vytvořte skript, který načte číslo z klávesnice a bude vypisovat číslo snížené o jedničku tak dlouho, dokud bude číslo větší než 0. #!/bin/bash echo -n Zadejte cislo: ; read cislo; until (test cislo -eq 0) do echo $cislo cislo=$[ $cislo - 1 ] done Poznámky: při práci s proměnnými v cyklech wihle a until nezapomeňte upravovat hodnotu řídící proměnné cyklu (cyklus for to dělá za vás). nezapomeňte, že vyhodnocení výrazu lze zapsat jak pomocí příkazu test, tak pomocí [ ]. při práci s cykly wihle a until se někde musí vzít výchozí hodnota řídící proměnné. Sytaxe jazyka C pro příkazy wihle I pro příkazy cyklu while a until je v shellu možné použít i syntaxi jazyka C a využít tak jeho možností. Obecná syntaxe je: 23

26 while ((podmínka)) do příkazy done Pro vysvětlení na příkladech použijeme stejný jednoduchý příklad, který jsme použili pro příkaz cyklu for. Př. Napište skript, který ze vstupních argumentů skriptu načte slovo a počet, který určí, kolikrát se má slovo vypsat na obrazovku. Zadané slovo pak vypíše ve tvaru 1. slovo, 2. slovo atd. #!/bin/bash echo -n Zadejte slovo: ; read slovo; echo -n Zadejte maximalni pocet: ; read pocet; while ((cislo <= $pocet)) do echo $cislo. $slovo ((cislo++)) done 24

27 1.4. Dodatky: Tato krátká část kapitoly o shellu obsahuje některé drobnosti, které se jinam nevešly K přesměrování výstupu, o který nemáte zájem, můžete použít zařízení /dev/null. Vše, co je na toto zařízení zasláno je zahozeno. Představte si to tak, že vše, co zašlete na zařízení null, pošlete do nicoty. Často je využíváno k přesměrování chybových hlášení. Př. Chcete li vytvořit adresář, který již existuje, systém zahlásí chybu. Na druhém obrázku vidíte,že v případě přesměrování systém chybové hlášení nevypíše. Abyste mohli účinně psát skripty je také potřeba mít přehled o základních příkazech viz.studijní materiál Instalace operačního systému a jeho konfigurace II. Linux. Příkazy uvedené v tomto materiálu je ovšem potřeba průběžně doplňovat dalším studiem o další a další příkazy. Zde jsou dva, které můžete využít při psaní skriptů: sleep způsobí prodlevu mezi vykonáním dalšího příkazu např. sleep 10 wc vypíše počet řádků určitého výstupu. V kombinaci s jinými příkazy např. ls l může sloužit k zjištění počtu souborů v daném adresáři. Parametry: -c vrátí počet bitů -m vrátí počet znaků -l vrátí počet řádků echo vypíše výstup na obrazovku a přejde na nový řádek. Parametr n potlačí přechod na nový řádek dos2unix převádí textové soubory z formátu používaného ve Windows do kódování Linuxu. Linux a Windows používají jiné kódy pro ukončení řádků. unix2dos převádí textové soubory z formátu Linuxu do formátu Windows Zapamatujte si příkazy dos2unix a unix2dos, protože můžete každou chvíli potřebovat skript napsaný v jednom prostředí použít v druhém prostředí. Pojmenovaná roura vytvořená příkazem mknod (na uživatelské úrovni pomocí příkazu mkfifo) využívá speciálního souboru, který jedním procesem může být otevřený pro vstup a jiným procesem pro výstup a mohou si tak vzájemně předávat data, což u standardní roury není možné. do roury musí na jedné straně alespoň jeden proces zapisovat a na druhé straně alespoň jeden proces číst Funkce v shellu obdobně jako u jiných programovacích jazyků je možné i v shellu vytvářet funkce funkce přijímá vstupní parametry (argumenty) 25

28 funkce může vracet návratovou hodnotu pomocí příkazu return. Není li příkaz return použit, je jako návratová hodnota funkce použita návratová hodnota posledního příkazu. o použití return provede okamžité ukončení funkce a nastaví hodnotu proměnné $? na hodnotu definovanou return (nebo posledního použitého příkazu ve funkci). o je li použit příkaz exit, je funkce ukončena. syntaxe: název () { tělo funkce } kde () je metaznak určující, že se jedná o funkci funkce je vyhodnocována v aktuálním shellu změny hodnot proměnných se projeví v aktuálním shellu. Je li potřeba funkci použít ve vnořených shellech, používá se příkaz export. Automatické zaznamenávání činnosti Při psaní skriptů, a nejen při této činnosti, můžete použit jako pomůcku příkaz script, který obdobně jako záznamník zaznamená do souboru zadané příkazy, ale také odezvu systému. script název_souboru Ukončení záznamu se provádí pomocí CTRL + D 26

29 1.5. Skripty Skript: posloupnost příkazů, které se mají vykonat. Chod skriptu může být řízen pomocí podmínek, cyklů apod. textový soubor obsahující seznam příkazů skript není kompilovaný do strojového (spustitelného, binárního) kódu, je pomalejší, ale za to čitelnější relativně snadno se vytváří a upravuje ve Windows se skripty označují jako dávkové soubory (s příponou.bat) Dříve, než začnete psát skripty, byste měli: znát princip základních datových struktur (podmínek, cyklů apod.) znát strukturu souborů v Linuxu mít přehled o použití základních příkazů Linuxu a jejich parametrů Typy úkolů vhodných pro skripty: automatizace práce se soubory a strukturou adresářů zálohování obecně všude tam, kde není potřeba velká interakce s uživatelem. Tam, kde je potřeba větší interakce s uživatelem, je vhodné najít již připravené aplikace nebo si ji naprogramovat pomocí programovacího jazyka Abyste mohli vyzkoušet spouštění skriptu a uvědomit si okolnosti ovlivňující toto spouštění, vytvořte si jednoduchý skript pozdrav, který smaže obrazovku a pozdraví vás (chcete vyzkoušet spuštění skriptu, proto není nutné vytvářet šílenosti): Na obrázku vidíte, že pokud se takovýto soubor pokusíte spustit, nic se nestane. Aby byl skript skriptem, nestačí jen samotný kód uvnitř skriptu, ale je potřeba systému sdělit, že se jedná o skript, což se provádí změnou oprávnění k souboru. Spuštění skriptu nastavení oprávnění Ke spuštění skriptu musí být nastavena potřebná oprávnění. Vše je vcelku logické. Aby uživatel mohl vytvořený skript spustit, potřebuje oprávnění ke skriptu: číst (r) systém si musí uživatelovým jménem přečíst, jaké příkazy jsou ve skriptu zadány spustit (x) systém musí uživatelovým jménem být schopný příkazy uvedené ve skriptu vykonat Když říkám, že uživatelovým jménem, znamená to, že pokud má mít uživatel možnost skript spustit, měl by mít oprávnění číst a spouštět buď jako vlastník, nebo jako člen skupiny, nebo, pokud má být skript spustitelný kýmkoli, pro všechny ostatní. Na následujícím obrázku vidíte, jak se změna oprávnění projevila na spustitelnosti skriptu. Všimněte si také, že systém po nastavení oprávnění spustit na soubor barevně skript odlišuje. 27

30 Systému je v tuto chvíli jedno, co je napsáno uvnitř souboru. Pokud nastavíte na soubor oprávnění spustit (x), považuje systém soubor za spustitelný, neboli skript. O obsah souboru (skriptu) se začne zajímat až v okamžiku, kdy jej má vykonat. Z tohoto důvodu je maximální oprávnění pro běžný soubor hodnota 6 (reprezentující oprávnění rw) a nikoliv 7 (rwx), jak nastavují mnozí studenti, protože nastavením oprávnění 7 (rwx) například na soubor dopis.txt, systému říkají, že dopis.txt je spustitelným souborem (skriptem). A to není pravda. Takže pro jistotu ještě jednou. Skript dělá skriptem: kód uvnitř skriptu (začínající #!/bin/bash) nastavením oprávnění číst a spouštět ke skriptu (rx) V případě volání překladače může být problém s jeho umístěním, které se může v různých systémech lišit. Lze tedy provést drobnou úpravu, která vám volání překladače zevšeobecní. K tomuto účelu slouží příkaz env, která nastaví standardní prostředí a spustí program, který mu je předán jako argument. Zápis by pak vypadal například takto: #!/bin/env bash #!/bin/env python apod. Spuštění skriptu a prohledávání aktuálního adresáře Se spouštěním skriptu také souvisí, zda v případě, že chcete spustit skript a zadáte do příkazové řádky jméno skriptu, prohledává aktuální adresář. V případě spuštění programu (skriptu) z aktuálního adresáře, nezapomeňte, že záleží na nastavení proměnné PATH, zda Linux prohledává aktuální adresář. Adresáře uvedené dříve mají vyšší prioritu, protože, systém spustí program v prvním adresáři, ve kterém jej podle seznamu v proměnné PATH nalezne. Př. Máte li připravený skript v aktuálním adresáři, pak jeho spuštění v případě, že: 1) systém prohledává aktuální adresář: 2) systém neprohledává aktuální adresář: V takovém případě voláte skript určením, že se skript nahází v aktuálním adresáři:./ Protože v proměnné PATH není uveden aktuální adresář reprezentovaný tečkou, systém se nepodíval do aktuálního adresáře, proto skript nenalezl. V obou případech je možné skript spustit zadáním absolutní cesty ke skriptu. Poznámka: občas se na místo dopsání aktuálního adresáře do proměnné PATH doporučuje, aby si každý uživatel v domovském adresáři ukládal skripty a programy, které chce spustit, do podadresáře bin ve svém domovském adresáři a proměnnou PATH pak rozšířit o cestu ~/bin. Oba uvedené způsoby spuštění spustí skript v podřízeném shellu, což s sebou nese důsledky: 28

31 proměnné, které nebyly exportovány, boudou v podřízeném shellu nedostupné proměnné z poddřízeného shellu budou po ukončení zapomenty 3) speciální způsob spuštění. Skript je spuštěn:. název_skriptu Jedná se o speciální spuštění skriptu ve stejném shellu. jsou dostupné proměnné z aktuálního shellu hodnoty proměnných změněné skriptem zůstávají po ukončení skriptu zachovány Na prvním obrázku máte pomocí hodnot proměnných $POKUS a $SHLVL ukázáno, že v případě spuštění skriptu pomocí./skript je použit vnořený shell a původní hodnota proměnné POKUS je po ukončení skriptu nezměněna, kdežto v případě spuštění skriptu speciálním způsobem. skript, je použit stávající shell a hodnota proměnné POKUS je po ukončení skriptu změněna. Při psaní skriptů pro manipulaci se strukturou adresářů je nutné si rozmyslet, zda použijete relativní nebo absolutní cestu k souborům a adresářům. Struktura skriptu skript se skládá z hlavičky a těla skriptu hlavička identifikuje Shell, který má skript zpracovat, přičemž je nepovinná. Pokud hlavička není uvedená je skript proveden aktuálním shellem. Pokud je v hlavičce uveden shell, je skript tomuto shellu předán, není li, je skript spuštěn aktuálním shellem jako vnořený. tělo skriptu obsahuje příkazy, které jsou vykonány shell musí být uveden absolutní cestou shell se uvádí ve tvaru: #!/cesta_k_shellu argumenty, kde argumenty upřesňují chování Shellu, který bude skript spouštět. Např: #!/usr/bin/perl skript bude předán interpreteru jazyka PERL pro rozlišení skriptů různých interpreterů se obvykle používají přípony :.sh shell.pl PERL.py Python.tcl Tcl/Tk 29

32 Argumenty předávané skriptům jméno_skriptu [argumenty] argumenty slouží k upřesnění chování (vlastností) spouštěného programu (skriptu k argumentům lze přistupovat buď jednotlivě, nebo jako k celku k argumentům předávaným skriptu při jeho spuštění lze přistupovat pomocí proměnných speciálního významu Proměnné speciálního významu pro přístup k argumentům skriptu $0 jméno skriptu $n n tý argument, kde n nabývá hodnot 1,2,3..9 (nula je jméno skriptu) ${n} libovolný n tý argument. V případě existence více argumentů je potřeba použít složené závorky, protože $11 by Shell chápal jako zřetězení $1 a čísla 1 $# číslo posledního argumentu $* seznam všech argumentů $@ seznam všech argumentů Př. Napište skript, který jako vstupní argumenty načte seznam jmen a následně vypíše: jméno skriptu hodnotu 1. zadaného argumentu počet zadaných argumentů vypíše všechny zadané argumenty #/bin/bash echo echo Jmeno skriptu: $0 echo Hodnota prvniho zadaneho argumentu je: $1 echo Pocet zadanych argumentu je: $# echo Byly zadany tyto argument: $@ Jak jste si asi všimli, tak proměnné $* a $@ mají význam všechny vstupní argumenty. Rozdíl je ale v tom, jak jsou chápány mezery mezi argument. V případě * jsou všechny mezery chápány jako znaky, takže argument tvoří jeden řetězec znaků $1 $2 $3, což z předchozího příkladu je řetězec petr karel. V jsou mezery chápány jako metaznaky a všechny zadané argumenty brány jako skupina samostatných argumentů $1 $2 $3, s nimiž se manipuluje společně. V našem předchozím příkladě je to tedy argument petr a karel, které jsou pak vypsány společně a odděleny mezerou. Pokud byste zadané vstupní parametry předávali dalšímu programu, tak použitím $* předáváte řetězec znaků petr karel a použitím $@ předáváte samostatně řetězce petr a karel. 30

33 V případě, že budete potřebovat odstranit přebytečné argumenty, můžete k tomu použít příkaz shift, který zleva odstraní zadaný počet argumentů: shift 2 odstraní argumenty $1 a $2. Př. Napište skript pozdrav, který vás pozdraví a řekne vám datum a čas. Vstupními argumenty budou vaše jméno a bydliště. #!/bin/bash echo; echo Ahoj $1 z $2. Dnes je $(date); echo Takto to vypadá, když se jako vstupní argumenty předá jméno a bydliště a takto, když se zapomenou zadat. Interaktivní skripty umožňují uživateli vložit hodnoty do už běžícího skriptu (umožňují od uživatele získat informace za chodu skriptu). interaktivou zajišťuje příkaz read, který ukládá do definované proměnné vstup od uživatele. Př. Použijeme předchozí velmi jednoduchý příklad se zadáním jména a příjmení, ale tentokrát nebudeme jméno a bydliště požadovat jako vstupní argument, ale zeptáme se na něj až za chodu skriptu. Variantou je dát místo středníku #!/bin/bash && a pak se načtení provede, jen echo -n Zadejte jmeno: ; read JMENO když předchozí příkaz proběhne echo -n Zadejte bydliste: ; read BYDLISTE úspěšně. echo Ahoj $JMENO z $BYDLISTE. Dnes je $(date). Parametr n příkazu echo zajistí, že se kurzor nepřemístí na další řádek. Dalším častým případem bývá situace, kdy potřebujete od uživatele získat jméno a heslo. Na rozdíl od předchozího případu potřebujete, aby se zadané heslo nezobrazovalo na obrazovce. K tomu slouží příkaz stty, který potlačí výpis všech znaků. #!/bin/bash echo -n Zadejte jmeno: ; read JMENO echo -n Zadejte heslo: ;stty -echo;read HESLO;stty echo;echo echo Vase jmeno je: $JMENO a zadane heslo: $HESLO. Pozor, stty potlačí výpis všech znaků i znaku přechodu na nový řádek. Proto je nutné po opětovné aktivaci výpisu znaků a před zobrazením výpisu přejít na nový řádek pomocí příkazu echo. 31

34 Ke zjednodušení interakce s uživatelem se také používá příkaz select, který slouží k výběru z více nabízených možností. Umožňuje také řešit situaci, když uživatel zadá vstup neodpovídající nabízeným možnostem. syntaxe: select proměnná in nabídky do příkazy done pro ukončení se používá příkaz break pokud uživatel zadá hodnotu z nabídky je tato hodnota uložena do proměnné REPLY a odpovídající možnost z nabídky je uložena do proměnné (v příkladě na obrázcích dole je to proměnná VOLBA). V případě, že zadá možnost, která není v nabídce, je zadaná odpověď uložena do proměnné REPLY a proměnná VOLBA zůstane prázdná. obě proměnné VOLBA i REPLY nezanikají po ukončení příkau select Vzhledem k tomu, že často potřebujete omezit rozhodnutí jen na možnosti uvedené v nabídce, je vhodné příkaz select zkombinovat s použitím podmínky, která určí, kdy je možné select ukončit. S příkazem select se používá proměnná REPLY do které se zapíše zvolená odpověď. V proměnné VOLBA bude uložena hodnota nazdar v proměnné REPLY bude uložena hodnota 3 Shrnutí: Jedním ze silných nástrojů Linuxu jsou jeho shelly, které umožňují automatizovat řadu činností nejen pomocí již připravených příkazů, ale také možností vytvářet vlastní skripty a v nivy využívat podmínek, cyklů, funkcí, vlastních proměnných apod. Je ovšem potřeba mít povědomí o tom, že v Linuxu může být celá řada shellů jako sh, bash, csh, tcsh apod. Při práci s shellem se používá řada proměnných ať už vnitřních proměnných, uživatelských proměnných nebo proměnných speciálního významu. Pamatujte, že pokud vytváříte vlastní proměnné zapisují se velkými písmeny např. JMENO a hodnota v nich uložená je reprezentována např. zápisem $JMENO. Pokud je proměnná používat v určitém shellu, není viditelná v jiném shellu, pokud nebyl použit příkaz export. V situacích, kdy je potřeba řídit vykonání příkazu podle toho, jak proběhl předchozí příkaz se používá podmíněných příkazů && a. Pro složitější vyhodnocování se používá příkaz if then elxe v kombinaci s příkazem test pro vyhodnocování výrazů, který lze ovšem zapsat také v podobě příkazu [ ]. Pro opakování činností jsou v shellu k dispozici příkazy cyklu for, while, until a také je možné použít cyklů zapsaných v jazyce C. 32

PROGRAMOVÁNÍ V SHELLU

PROGRAMOVÁNÍ V SHELLU PROGRAMOVÁNÍ V SHELLU Prostředí, jazyk, zdrojový kód chceme-li posloupnost jistých příkazů používat opakovaně, případně z různých míst adresářové struktury, můžeme tuto posloupnost uložit souboru, který

Více

PSK3-9. Základy skriptování. Hlavička

PSK3-9. Základy skriptování. Hlavička PSK3-9 Název školy: Autor: Anotace: Vyšší odborná škola a Střední průmyslová škola, Božetěchova 3 Ing. Marek Nožka Základy skriptování v unixovém shellu Vzdělávací oblast: Informační a komunikační technologie

Více

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. Přednáška 7 Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu

Více

Skripty - úvod. Linux - skripty 2

Skripty - úvod. Linux - skripty 2 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 www.rvp.cz, ISSN: 1802-4785. Provozuje Národní ústav pro vzdělávání,

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Sekvenční a podmíněné provádění

Sekvenční a podmíněné provádění Programování v Bourne shellu Sekvenční a podmíněné provádění Sekvenční provádění znamená vykonávání jednoho příkazu za druhým bez ohledu na okolnosti. Pro oddělení příkazů při sekvenčním provádění se používá

Více

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

ŘÍDÍCÍ STRUKTURY - PODMÍNKY ŘÍDÍCÍ STRUKTURY - PODMÍNKY Pokusíme se rozvětvit sktipt v Bashi ŘÍDÍCÍ STRUKTURY - PODMÍNKY V této lekci budeme probírat podmínkové, tj., které nám pomohou rozvětvit skript a provádět určité pouze při

Více

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8 Přednáška 8 Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. 1 Proměnné Jména nových proměnných by neměly kolidovat se jmény předdefinovaných proměnných.

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Proměnné a parametry. predn_08.odt :00:38 1

Proměnné a parametry. predn_08.odt :00:38 1 Proměnné a parametry predn_08.odt 16.04.2007 14:00:38 1 Proměnné a parametry Jméno proměnné - identifikátor [a-za-z_][a-za-z_0-9]* Hodnota proměnné textový řetězec celočíselná hodnota - ne v sh Přesun

Více

C2110 Operační systém UNIX a základy programování

C2110 Operační systém UNIX a základy programování C2110 Operační systém UNIX a základy programování 5. lekce Petr Kulhánek kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Masarykova univerzita, Kotlářská 2, CZ-61137 Brno C2110 Operační systém

Více

C2110 Operační systém UNIX a základy programování

C2110 Operační systém UNIX a základy programování C2110 Operační systém UNIX a základy programování 6. 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á

Více

Střední odborná škola a Střední odborné učiliště, Hořovice

Střední odborná škola a Střední odborné učiliště, Hořovice Kód DUM : VY_32_INOVACE_LIN.1.02 Název materiálu: Anotace Autor Jazyk Očekávaný výstup 02- Zásady psaní a řetězení příkazů, jednoduchý skript DUM naučí žáky zásady práce s příkazy shellu BASH, zásady psaní

Více

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární

Více

PRACUJEME S SHELLEM Ať žije BASH.

PRACUJEME S SHELLEM Ať žije BASH. PRACUJEME S SHELLEM Ať žije BASH. V této lekci nakoukneme do základů shellu Bash. Trocha nudné teorie. Název je akronym pro Bourne again shell, což poukazuje na jeho základ v dříve nejpoužívanějším unixovém

Více

Úvod do Unixu. man: příkaz pro zobrazení nápovědy k danému příkazu, programu (pokud je k dispozici), např. man cp. pwd: vypíše cestu k aktuální pozici

Úvod do Unixu. man: příkaz pro zobrazení nápovědy k danému příkazu, programu (pokud je k dispozici), např. man cp. pwd: vypíše cestu k aktuální pozici Základní příkazy Úvod do Unixu man: příkaz pro zobrazení nápovědy k danému příkazu, programu (pokud je k dispozici), např. man cp vypíše nápovědu o příkazu cp, manuálová stránka se ukončí stisknutím klávesy

Více

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

8 Třídy, objekty, metody, předávání argumentů metod

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

Střední odborná škola a Střední odborné učiliště, Hořovice

Střední odborná škola a Střední odborné učiliště, Hořovice Kód DUM : VY_32_INOVACE_LIN.1.03 Název materiálu: Anotace Autor Jazyk Očekávaný výstup 03 BASH rozbory a psaní skriptů DUM naučí psát elementární BASH skripty, ukáže zásady psaní cyklů a přepínačů Ing.

Více

Linux-příkazový řádek

Linux-příkazový řádek Linux-příkazový řádek Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu www.rvp.cz, ISSN: 1802-4785. Provozuje Národní ústav pro vzdělávání,

Více

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek 1/41 Základní příkazy Všechny příkazy se píšou malými písmeny! Za většinou příkazů musí být středník (;)! 2/41 Základní příkazy

Více

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2 Přednáška 2 Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. 1 Systém souborů (FS) I 2 Systém souborů II Logický systém souborů pro běžného uživatele se jeví jako jediná homogenní struktura

Více

6. Příkazy a řídící struktury v Javě

6. Příkazy a řídící struktury v Javě 6. Příkazy a řídící struktury v Javě Příkazy v Javě Příkazy v Javě Řídicí příkazy (větvení, cykly) Přiřazovací příkaz = Řízení toku programu (větvení, cykly) Volání metody Návrat z metody - příkaz return

Více

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

Úvod do Linuxu. SŠSI Tábor 1

Úvod do Linuxu. SŠSI Tábor 1 Úvod do Linuxu SŠSI Tábor 1 Trocha historie konec 60. let - AT&T vyvíjí MULTICS 1969 - AT&T Bell Labs - začátek OS Unix začátek 70.let - AT&T vývoj OS Unix kolem 1975 - University of California at Berkley

Více

Základní příkazy OS UNIX

Základní příkazy OS UNIX 1 Základní příkazy OS UNIX Výpis obsahu adresáře ls [přepínače] [soubor]! výpis informací o zadaných souborech! pokud zadáme jméno adresáře, je vypsán obsah adresáře (seznam souborů, které jsou v adresáři

Více

Rozšíření ksh vůči sh při práci s proměnnými

Rozšíření ksh vůči sh při práci s proměnnými Rozšíření ksh vůči sh při práci s proměnnými (X36UNX, Jan Skalický, 2006) Pole homogenní lineární struktura implicitn ě s číselným rozsahem index ů 0...1023 (někde 4095) implicitn ě řetězcov ě orientovaná

Více

Úloha 3 editor a skripty. připojte se vzdáleně na dray6.feld.cvut.cz heslo získáte na adrese https://service.felk.cvut.cz/heslo

Úloha 3 editor a skripty. připojte se vzdáleně na dray6.feld.cvut.cz heslo získáte na adrese https://service.felk.cvut.cz/heslo Domácí příprava k předmětu YD38UOS Úloha 1 vzdálené připojení připojte se vzdáleně na dray6.feld.cvut.cz heslo získáte na adrese https://service.felk.cvut.cz/heslo pro připojení použijte protokol ssh (pokud

Více

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 WSH Windows Script Hosting OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 Co je skript? Skriptování nástroj pro správu systému a automatizaci úloh Umožňuje psát skripty jednoduché interpretované programové

Více

PHP tutoriál (základy PHP snadno a rychle)

PHP tutoriál (základy PHP snadno a rychle) PHP tutoriál (základy PHP snadno a rychle) Druhá, vylepšená offline verze. Připravil Štěpán Mátl, http://khamos.wz.cz Chceš se naučit základy PHP? V tom případě si prostuduj tento rychlý průvodce. Nejdříve

Více

6 Příkazy řízení toku

6 Příkazy řízení toku 6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní

Více

Stručný návod k programu Octave

Stručný návod k programu Octave Stručný návod k programu Octave Octave je interaktivní program vhodný pro technické výpočty. Je nápadně podobný programu MATLAB, na rozdíl od něho je zcela zadarmo. Jeho domovská vebová stránka je http://www.octave.org/,

Více

Úvod do Operačních Systémů

Úvod do Operačních Systémů Úvod do Operačních Systémů 9. cvičení Proměnné, složené příkazy, funkce, numerické výpočty. 1 Obsah Numerické výpočty v shellu externí příkazy Proměnné práce s proměnnými práce s pozičními parametry Bloky

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

Více

Základy operačního systému LINUX část III

Základy operačního systému LINUX část III Základy operačního systému LINUX část III Přesměrování standardního vstupu a výstupu Přídavná zařízení jsou v systému reprezentována svými řídícími soubory. Řídící soubory umožňují procesům pracovat s

Více

Unix je víceuživatelský a víceúlohový OS

Unix je víceuživatelský a víceúlohový OS Unix je víceuživatelský a víceúlohový OS Mezi základní úkoly každého OS patří: - Správa hardwareových prostředků - Správa souborového systému - Správa procesů - U víceuživatelských systémů rovněž řízení

Více

BASH. Kouzla s příkazovou řádkou. Petr Koloros

BASH. Kouzla s příkazovou řádkou. Petr Koloros BASH Kouzla s příkazovou řádkou Petr Koloros Obsah příkazová řádka proměnné prsaté závorky {hot! hot!} manipulace se soubory vstup, výstup, přesměrování hlídače regularní výrazy filtry skriptování pitfalls

Více

Úvod do Operačních Systémů

Úvod do Operačních Systémů Úvod do Operačních Systémů 8. cvičení Práce s procesy a úlohami, příkaz test 1 Obsah Práce s procesy ps, ptree, pgrep, time kill, trap nice, stty, truss (strace) vmstat, top Práce s úlohami test nohup,

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

Vzorce. StatSoft. Vzorce. Kde všude se dá zadat vzorec

Vzorce. StatSoft. Vzorce. Kde všude se dá zadat vzorec StatSoft Vzorce Jistě se Vám již stalo, že data, která máte přímo k dispozici, sama o sobě nestačí potřebujete je nějak upravit, vypočítat z nich nějaké další proměnné, provést nějaké transformace, Jinak

Více

Systém souborů (file system, FS)

Systém souborů (file system, FS) UNIX systém souborů (file system) 1 Systém souborů (file system, FS)! slouží k uchování dat na vnějším paměťovém médiu a zajišťuje přístup ke struktuře dat! pro uživatele možnost ukládat data a opět je

Více

Základní příkazy pro práci se soubory

Základní příkazy pro práci se soubory A7B38UOS Úvod do operačních systémů 3. Cvičení Základní příkazy pro práci se soubory Obsah cvičení Informace o souborech a adresářích Informace o obsahu souborů Vytváření souborů a adresářů Manipulace

Více

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání Čtvrtek 3. listopadu Makra v Excelu Obecná definice makra: Podle definice je makro strukturovanou definicí jedné nebo několika akcí, které chceme, aby MS Excel vykonal jako odezvu na nějakou námi definovanou

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

Přednáška 1. Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů. SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů.

Přednáška 1. Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů. SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů. Přednáška 1 Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů. 1 Hodnocení studentů III Klasifikace 90 100 bodů A (výborně)

Více

LINUX SOUBORY. Zadejme příkaz ls l! V této lekci se odrazíme od dlouhého výpisu příkazu ls a uvidíme, kam nás to zanese. SPŠ Teplice - 3.

LINUX SOUBORY. Zadejme příkaz ls l! V této lekci se odrazíme od dlouhého výpisu příkazu ls a uvidíme, kam nás to zanese. SPŠ Teplice - 3. LINUX SOUBORY Zadejme příkaz ls l! V této lekci se odrazíme od dlouhého výpisu příkazu ls a uvidíme, kam nás to zanese. Dlouhý výpis příkazu ls Zadejte příkaz ls s parametrem l. Před každou položkou (souborem

Více

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout.   tel: Skripta ke školení Základy VBA vypracoval: Tomáš Herout e-mail: herout@helpmark.cz tel: 739 719 548 2016 Obsah TROCHA TEORIE VBA...2 ZPŮSOB ZÁPISU VE VBA...2 CO JE TO FUNKCE...2 CO JE TO PROCEDURA...2

Více

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

Základní příkazy UNIXu (Linuxu)

Základní příkazy UNIXu (Linuxu) Základní příkazy UNIXu (Linuxu) Ostatní clear smazání obrazovky man nápověda k příkazům (zkus man man) Ovládání příkazu man PgUp, b stránka vzhůru PgDn, mezerník stránka dolů šipky nahoru a dolů pohyb

Více

DUM 06 téma: Tvorba makra pomocí VBA

DUM 06 téma: Tvorba makra pomocí VBA DUM 06 téma: Tvorba makra pomocí VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie

Více

Identita uživatelů, přístupová práva. Linux

Identita uživatelů, přístupová práva. Linux Identita uživatelů, přístupová práva Linux Uživatel Při přihlášení do systému musí uživatel: identifikovat systém, na který se chce přihlásit fyzické umístění (lokální přihlášení) jméno systému/ IP adresa

Více

Operační systémy. Cvičení 1: Seznámení s prostředím

Operační systémy. Cvičení 1: Seznámení s prostředím Operační systémy Cvičení 1: Seznámení s prostředím 1 Obsah cvičení Organizace cvičení Učebna K311 Unixová učebna K327 (Solárium) Přihlášení do Unixu Spouštění vzorových příkladů vzdáleně (Unix) lokálně

Více

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka. 1 Disky, adresáře (složky) a soubory Disky Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka. A:, B: C:, D:, E:, F: až Z: - označení disketových mechanik - ostatní disky

Více

ANOTACE vytvořených/inovovaných materiálů

ANOTACE vytvořených/inovovaných materiálů ANOTACE vytvořených/inovovaných materiálů Číslo projektu Číslo a název šablony klíčové aktivity Tematická oblast Formát Druh učebního materiálu Druh interaktivity CZ.1.07/1.5.00/34.0722 III/2 Inovace a

Více

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů SPJA, cvičení 1 ipython, python, skripty základy syntaxe: základní datové typy, řetězce podmínky: if-elif-else, vyhodnocení logických výrazů cykly: for, while kolekce: seznam, n-tice, slovník funkce, list

Více

Cvičení 2. Přesměrování vstupu a výstupu. Posloupnost příkazů. Příkazy pro informaci o uživatelích

Cvičení 2. Přesměrování vstupu a výstupu. Posloupnost příkazů. Příkazy pro informaci o uživatelích Cvičení 2 Přesměrování vstupu a výstupu Příkaz > abc výstup příkazu jde do souboru abc. Pokud soubor neexistuje je vytvořen. Pokud existuje je přepsán. Příkaz >> abc výstup příkazu jde do souboru abc.

Více

- jak udělat konstantu long int: L long velka = 78L;

- jak udělat konstantu long int: L long velka = 78L; Konstanty (konstatní hodnoty) Např.: - desítkové: 25, 45, 567, 45.678 - osmičkové: 045, 023, 03 vždy začínají 0 - šestnáctkové: 0x12, 0xF2, 0Xcd, 0xff, 0xFF - jak udělat konstantu long int: 245566553L

Více

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky. PHP - úvod Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky. Klíčové pojmy: PHP, webový prohlížeč, HTTP, FTP Základní pojmy služba WWW = 1990 první prototyp serveru, od roku 1994

Více

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

UŽIVATEL, SKUPINA, PROCES

UŽIVATEL, SKUPINA, PROCES UŽIVATEL, SKUPINA, PROCES Systém bez uživatele je jedině Matrix? Uživatelé se seskupují a řídí práci. Group = skupina uživatelů Trocha teorie: LINUX je systémem víceuživatelským. Tzn. Že k dané instanci

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,

Více

MAXScript výukový kurz

MAXScript výukový kurz MAXScript výukový kurz Díl čtvrtý jazyk MAXScript, část I. Jan Melichar, březen 2008 Jan Melichar (aka JME) strana 1 OBSAH ÚVOD... 4 ZÁKLADNÍ PŘÍKAZY... 5 OPERÁTORY... 6 PROMĚNNÉ... 6 POLE... 7 ZÁVĚREM...

Více

Tabulkový procesor. Základní rysy

Tabulkový procesor. Základní rysy Tabulkový procesor Tabulkový procesor je počítačový program zpracovávající data uložená v buňkách tabulky. Program umožňuje použití vzorců pro práci s daty a zobrazuje výsledné hodnoty podle vstupních

Více

2 Datové typy v jazyce C

2 Datové typy v jazyce C 1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,

Více

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru Textové řetězce V jazyce C neexistuje typ proměnné, který by byl určen výhradně pro ukládání textu V jazyce C používáme

Více

Úvod do Operačních Systémů

Úvod do Operačních Systémů Úvod do Operačních Systémů 10. cvičení Uživatelský vstup, zpracování přepínačů, psaní a ladění skriptů, plánování úloh. 1 Obsah Skript pro logování informací o systému, uložení konfigurace, transformaci

Více

VISUAL BASIC. Práce se soubory

VISUAL BASIC. Práce se soubory VISUAL BASIC Práce se soubory Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit

Více

Základy PERLu snadno a rychle

Základy PERLu snadno a rychle Základy PERLu snadno a rychle Začínáme Začneme tak, že si vytvoříme třeba soubor hellopl, do souboru napíšeme: print "Hello world\n"; Pak soubor nastavíme jako spustitelný: $ chmod +x hellopl A teď si

Více

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty. Proměnná Pojmenované místo v paměti sloužící pro uložení hodnoty. K pojmenování můžeme použít kombinace alfanumerických znaků, včetně diakritiky a podtržítka Rozlišují se velká malá písmena Název proměnné

Více

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů Začínáme vážně programovat Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů Podmínky a cykly Dokončení stručného přehledu řídících struktur jazyka C. Složený příkaz, blok Pascalské

Více

Formátové specifikace formátovací řetězce

Formátové specifikace formátovací řetězce 27.2.2007 Formátové specifikace formátovací řetězce - je to posloupnost podle které překladač pozná jaký formát má výstup mít - posloupnosti začínají znakem % a určující formát vstupu/výstupu - pokud chcete

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

LINUX ADRESÁŘOVÁ STRUKTURA. Co to, hrome, je? V této lekci se budeme brouzdat adresáři. SPŠ Teplice - 3.V

LINUX ADRESÁŘOVÁ STRUKTURA. Co to, hrome, je? V této lekci se budeme brouzdat adresáři. SPŠ Teplice - 3.V LINUX ADRESÁŘOVÁ STRUKTURA Co to, hrome, je? V této lekci se budeme brouzdat adresáři. KOŘENOVÝ ADRESÁŘ kořen = root tak se mu říká Ve skutečnosti se jmenuje / (lomítko, slash). Vše ostatní je v ubuntu

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

1. Umístěte kurzor do sloupce Datový typ na řádek s polem, ve kterém vytvořit chcete seznam.

1. Umístěte kurzor do sloupce Datový typ na řádek s polem, ve kterém vytvořit chcete seznam. 10.6.7 POSTUP TVORBY KOMBINOVANÉHO SEZNAMU 1. Umístěte kurzor do sloupce Datový typ na řádek s polem, ve kterém vytvořit chcete seznam. 2. V rozbalovací nabídce se seznamem datových typů vyberte volbu

Více

Přednáška 5. Identita uživatelů, procesů a souborů. Přístupová práva a jejich nastavení. Úvod do Operačních Systémů Přednáška 5

Přednáška 5. Identita uživatelů, procesů a souborů. Přístupová práva a jejich nastavení. Úvod do Operačních Systémů Přednáška 5 Přednáška 5 Identita uživatelů, procesů a souborů. Přístupová práva a jejich nastavení. 1 Uživatel Při přihlášení do systému musí uživatel: identifikovat systém, na který se chce přihlásit fyzické umístění

Více

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: vzdělávací

Více

10 Algoritmizace Příklad 2 Word 2007/ VBA

10 Algoritmizace Příklad 2 Word 2007/ VBA TÉMA: Zápis algoritmu, cyklus se známým počtem opakování Prostředí aplikace Wordu je možné doplnit v rámci využití maker o automatizaci složitějších posloupností příkazů. Vedle záznamu makra je možno makra

Více

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox 02. HODINA Obsah: 1. Typy souborů a objektů 2. Ovládací prvky Label a TextBox 3. Základní příkazy a vlastnosti ovládacích prvků 4. Práce s objekty (ovládací prvky a jejich vlastnosti) 2.1 Typy souborů

Více

Programování v C++, 2. cvičení

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina 5a. Makra Visual Basic pro Microsoft Escel Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty Zde bude stránka o cyklických odkazech a iteracích.

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace. Popis ovládání 1. Úvod Tento popis má za úkol seznámit uživatele se základními principy ovládání aplikace. Ovládání je možné pomocí myši, ale všechny činnosti jsou dosažitelné také pomocí klávesnice. 2.

Více

Paměť počítače. alg2 1

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod 11. 1. Vítejte v Ruby 15. O autorovi 9 Poděkování 9

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod 11. 1. Vítejte v Ruby 15. O autorovi 9 Poděkování 9 Začínáme programovat v Ruby on Rails 9 O autorovi 9 Poděkování 9 Úvod 11 Komu je kniha určena 11 Jak je kniha uspořádána 11 Co ke knize potřebujete 12 Konvence 12 Zdrojový kód 13 Poznámka redakce českého

Více

Programování v jazyce C a C++

Programování v jazyce C a C++ Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu

Více

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

Úvod do Operačních Systémů

Úvod do Operačních Systémů Úvod do Operačních Systémů 3. cvičení Základní příkazy pro práci se soubory 1 Obsah Zjištění informací o souborech a FS pwd, ls, du, df, quota Zjištění informací o obsahu souborů file, cat, strings, od,

Více

Operační systém UNIX

Operační systém UNIX UNIX z pohledu uživatele 1 Operační systém UNIX Nejzákladnější komponenty:! jádro (kernel)! shell! utility Jádro operačního systému! v podstatě představuje vlastní operační systém! fyzicky je to jediný

Více

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk

A7B38UOS Úvod do operačních systémů. 6. Cvičení. Příkazy sed a awk A7B38UOS Úvod do operačních systémů 6. Cvičení Příkazy sed a awk sed sed [přepínače] 'příkaz' [soubory] sed [přepínače] -f skript [soubory] Stream editor - edituje neinteraktivně jeden nebo více souborů.

Více

Přednáška 1. Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů.

Přednáška 1. Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů. Přednáška 1 Úvod. Historie OS Unix. Architektura OS Unix. Interpret příkazů SHELL. Zpracování příkazové řádky. Speciální znaky. Zkratky příkazů. Úvod Informace a materiály k předmětu http://edux.felk.cvut.cz

Více

Sada 1 - PHP. 03. Proměnné, konstanty

Sada 1 - PHP. 03. Proměnné, konstanty S třední škola stavební Jihlava Sada 1 - PHP 03. Proměnné, konstanty Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2 - inovace a

Více

Nastroje na zpracovani textu:

Nastroje na zpracovani textu: Nastroje na zpracovani textu: head - vypise prvnich x radku, standartne x=10 tail vypise poslednich x radku, standartne x=10 nl vypise a ocisluje radky v souboru a vysledek posle na STDOUT, soubor se nemeni

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více