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.

Podobné dokumenty
Numerické výpočty, komprese a archivace, návratový kód.

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

PROGRAMOVÁNÍ V SHELLU

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

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

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

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

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

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

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

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

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

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

Skripty - úvod. Linux - skripty 2

Algoritmizace a programování

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

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

LEKCE 6. Operátory. V této lekci najdete:

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

Programování v jazyce JavaScript

Programovací jazyk Pascal

Přednáška 4. Regulární výrazy. Filtry grep, sed a awk. Úvod do Operačních Systémů Přednáška 4

Basic256 - úvod do programování Příklady. ing. petr polách

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

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

Regulární výrazy. Filtry grep, sed a awk.

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Jazyk C# a platforma.net

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

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

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

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

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

MQL4 COURSE. By Coders guru -4 Operace & Výrazy

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

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

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

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

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

Racionální čísla, operátory, výrazy, knihovní funkce

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

Sada 1 - Základy programování

Racionální čísla, operátory, výrazy, knihovní funkce

Zápis programu v jazyce C#

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Algoritmizace a programování

Poslední nenulová číslice faktoriálu

Operátory. Základy programování 1 Tomáš Kühr

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

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

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

Nastroje na zpracovani textu:

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

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

Inovace bakalářského studijního oboru Aplikovaná chemie

Úvod do programovacích jazyků (Java)

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

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ů

Tvorba výrazu: speciální znaky shellu se uvádějí do apostrofů jednotlivé části výrazu se oddělují mezerou

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Úvod do programování. Lekce 1

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

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Řídicí struktury. alg3 1

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

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

Domácí příprava k předmětu YD38UOS Úloha 10 práce s lokálními soubory pokračování

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ů.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Program grep. predn_05.doc

Základy algoritmizace a programování

NPRG030 Programování I, 2010/11

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

Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky.

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

NPRG030 Programování I, 2016/17 1 / :58:13

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.


IUJCE Přednáška č. 1. programování v C na vyšší úrovni základy objektově orientovaného programovaní v (C++, C#)

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

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

Programovací jazyk C++ Hodina 1

Regulární výrazy a grep

Regulární výrazy. jemný úvod. Miloslav Brada

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

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ů.

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

CZ.1.07/1.5.00/

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Úvod do databázových systémů

Transkript:

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 uvedeného jako argumenty. Argumenty (operandy a operátory) musí být odděleny alespoň jednou mezerou. Pozor na kolizi se speciálními znaky shellu (musíme předřadit znak \). Operátor + - * / % Význam sčítání odčítání násobení celočíselné dělení zbytek po celočíselné dělení Příklad N=`expr $N1 + 3` N=`expr $N1 - $N2` N=`expr 10 \* 21` N=`expr $N1 / $N2` N=`expr $N1 % 5` 2

Celočíselná aritmetika II Výrazy se vyhodnocují podle priorit (jako v matematice): nejdříve výrazy v závorkách \( \) potom operace *, /, % a nakonec operace + a - Operace se stejnou prioritou se vyhodnocují zleva doprava. Příklady: $ A=`expr 5 + 3 \* 2` $ echo $A 11 $ A=`expr \( 5 + 3 \) \* 2` $ echo $A 16 3

Celočíselná aritmetika III Příkaz let výraz nebo((výraz)) (neumí sh) Operandy a operátory ve výrazu se nemusí oddělovat mezerami. Nehrozí kolize se speciálními znaky shellu. Proměnné ve výrazu se automaticky nahrazují hodnotou (netřeba používat znak $). Operátor + - * / % # << >> Význam sčítání odčítání násobení celočíselné dělení zbytek po celočíselné dělení základ soustavy bitový posun doleva bitový posun doprava Příklad ((N = N1 + 3)) ((N = N1 - N2)) ((N = 10 * 21)) ((N = N1 / N2)) ((N = N1 % 5)) ((N=2#1011)) ((N= 2#1011 << 3)) ((N= 2#1011 >> 3)) 4

Celočíselná aritmetika IV Operátor & Význam bitový AND Příklad ((N = 2#1011 & 2#1101)) bitový OR ((N = 2#1011 2#1101)) ^ bitový XOR ((N = 2#1011 ^ 2#1101)) 5

Návratový kód Každý proces při ukončení vrací návratový kód. Návratový kód = přirozené číslo 0, 1,...,255 0 úspěšné ukončení procesu 1,...,255 chyba při běhu procesu, např. 1 program byl spuštěn, ale proces nebyl úspěšný 2 program nepracoval 127 program nebyl nalezen Návratový kód posledního příkazu spuštěného na popředí je uložen v proměnné $? Skript shellu lze ukončit s návratový kódem n pomocí příkazu exit [n] Funkce shellu lze ukončit s návratový kódem n pomocí příkazu return [n] 6

Příklady $ grep 'root' /etc/passwd root:x:0:1:super-user:/root:/sbin/sh $ echo $? 0 $ grep 'XXX' /etc/passwd $ echo $? 1 $ grep 'root' /XXX grep: can't open /XXX $ echo $? 2 $ XXXgrep 'root' /etc/passwd -bash: XXXgrep: command not found $ echo $? 127 7

Příkaz test Vrací návratový kód na základě vyhodnocení výrazu uvedeného jako jeho parametry. Parametry jsou analyzovány shellem, proto musí být odděleny aspoň jednou mezerou u speciálních znaků shellu musí předcházet znak \ Složené výrazy \( v1 \) přednostní vyhodnocení podvýrazu v1 v1 a v2 logický součin (je true pokud v1 i v2 jsou true) v1 o v2 logický součet (je true pokud aspoň jeden podvýraz je true)! v1 logická negace (je true, pokud je v1 false) 8

[ výraz ] Synonyma příkazu test je synonymem příkazu test výraz [[ výraz ]] jen u ksh a bash, zabudovaný příkaz, rozšířená varianta -a je nahrazeno && -o je nahrazeno (( číselný výraz )) jen u ksh a bash, true, pokud hodnota výrazu je různá od nuly na místě výrazu lze použít i přiřazovací příkaz numerickým proměnným se nepředřazuje znak $ operandy se nemusí oddělovat mezerami V ksh i bash je příkaz test zabudovaným příkazem (tzn. rychlejší). 9

Určování atributů souborů Přepínač -f -d -s -e -L -r -w -x Příklad [ -f soubor ] [ -d soubor ] [ -s soubor ] [ -e soubor ] [ -L soubor ] [ -r soubor ] [ -w soubor ] [ -x soubor ] Význam soubor existuje a je obyčejným souborem? soubor r existuje a je adresářem? soubor existuje a není prázdný? soubor existuje? (neumí sh) soubor existuje a je symbolickým linkem? (neumí sh) soubor existuje a má nastaveno právo r? soubor existuje a má nastaveno právo w? soubor existuje a má nastaveno právo x? Další podrobnosti lze najít pomocí: man sh, man ksh, man bash. 10

Příklady $ test -f /etc/passwd ; echo $? 0 $ [ -f /etc/passwd ] ; echo $? 0 $ test -d /etc/passwd ; echo $? 1 $ [ -d /etc/passwd ] ; echo $? 1 $ test -f /etc/passwd -a -r /etc/passwd ; echo $? 0 $ [ -f /etc/passwd -a -r /etc/passwd ]; echo $? 0 11

Příklady $ P="/etc/group" $ [ -r $P ] ; echo $? 0 $ [ -r $P ] && echo "soubor $P je citelny" soubor /etc/group je citelny $ P="/etc/shadow" $ [ -r $P ] ; echo $? 1 $ [ -r $P ] echo "soubor $P neni citelny" soubor /etc/shadow neni citelny $! [ -r $P ] && echo "soubor $P neni citelny" soubor /etc/shadow neni citelny 12

Porovnávání řetězců Test [ r1 = r2 ] [ r1!= r2 ] [ r1 < r2 ] [ r1 > r2 ] [ -z r1 ] [ -n r1 ] Význam Řetězce r1 a r2 jsou stejné? Řetězce r1 a r2 jsou různé? Je řetězec r1 v abecedě před řetězcem r2? Je řetězec r1 v abecedě za řetězcem r2? Je řetězec r1 prázdný? Není řetězec r1 prázdný? Pozor! Použije-li se jako operand relace nebo unární operace proměnná, je vhodné ji uvést v uvozovkách ("). Jinak dojde, v případě že hodnota proměnné je prázdný řetězec, k syntaxtické chybě. 13

Příklady $ test "Jana" \< "Petr" ; echo $? 0 $ [ "Jana" \< "Petr" ] ; echo $? 0 $ A=Ales ; B=Jiri ; C="Dobry den" $ test $A \< $B ; echo $? 0 $ test $A = $B ; echo $? 1 $ test $B \< $C ; echo $? -bash: test: too many arguments 2 $ test "$B" \< "$C" ; echo $? 1 14

Porovnávání čísel Test [ n1 eq n2 ] Význam Číslo n1 je rovno číslu n2? [ n1 ne n2 ] Číslo n1 není rovno číslu n2? [ n1 lt n2 ] [ n1 gt n2 ] [ n1 le n2 ] [ n1 ge n2 ] Číslo n1 je menší než číslo n2? Číslo n1 je větší než číslo n2? Číslo n1 je menší nebo rovno číslu n2? Číslo n1 je větší nebo rovno číslu n2? 15

Příklady $ test 2 -lt 7 ; echo $? 0 $ [ 2 -lt 7 ] ; echo $? 0 $ test 2 -gt 7 ; echo $? 1 $ [ 2 -gt 7 ] ; echo $? 1 $ A=10 ; B=7 $ test $A -eq $B echo "$A neni rovno $B" 10 neni rovno 7 $ [ $A -gt $B ] && echo "$A > $B" 10 > 7 16

Příkazy Jednoduché příkazy vnitřní (vestavěné) příkazy shellu: např. kill, echo,., :, true, false, exit, return, continue,... vnější příkazy (binární soubory nebo skripty): např. /bin/ls, /etc/rc3.d/s50apache Složené příkazy Pokud není uvedeno jinak, návratový kód složeného výrazu je návratový kód posledního provedeného jednoduchého příkazu. Větvení výpočtu Cykly podmíněný příkaz if příkaz výběru case while, until, for Funkce shellu 17

Příkaz if Syntaxe if seznam_příkazů_1 then seznam_příkazů_2 [ elif seznam_příkazů_3 then seznam_příkazů_4 ]... [ else seznam_příkazů_5 ] fi Popis Pokud seznam_příkazů_1 vrátí nulový návratový kód, je prováděn seznam_příkazů_2 jinak, pokud seznam_příkazů_3 vrátí nulový návratový kód, je prováděn seznam_příkazů_4 jinak... 18

Příklady Skript if.sh: #!/bin/sh if [ $# -ne 1 ] ; then echo "Volani: $0 cislo_navratoveho_kodu" exit 2 fi exit $1 Spuštění: $ chmod 755 if.sh $./if.sh Volani:./if.sh cislo_navratoveho_kodu $./if.sh 65 $ echo $? 65 19

Příklady $ grep root /etc/passwd root:x:0:1:super-user:/root:/sbin/sh $ echo $? 0 $ grep root /etc/passwd > /dev/null $ echo $? 0 $ if grep root /etc/passwd > /dev/null > then > echo "ucet root existuje" > fi ucet root existuje 20

Varianty k příkazu if seznam_příkazů_1 && seznam_příkazů_2 je ekvivalentní: if seznam_příkazů_1 ; then seznam_příkazů_2 fi seznam_příkazů_1 seznam_příkazů_2 je ekvivalentní: if seznam_příkazů_1 ; then : else seznam_příkazů_2 fi Příklady $ grep XYZ soubor && lp soubor $ grep XYZ soubor echo XYZ nenalezeno 21

Příkaz case Syntaxe case hodnota in vzor_1) seznam_příkazů_1 ;;... vzor_n) seznam_příkazů_n ;; esac Popis hodnota je postupně porovnávána se vzory (podle pravidel náhrad jmen souborů, nikoliv regulárních výrazů). Pokud dojde ke shodě, je proveden seznam příkazů uvedených za vzorem a tím příkaz case končí. Vzor může být tvořen více variantami oddělenými znakem. Bývá zvykem uvádět jako poslední vzor *) a za něj příkazy provedené v případě selhání ostatních vzorů. 22

Příklady #!/sbin/sh case "$1" in 'start') [ -x /usr/lib/lpsched ] && /usr/lib/lpsched ;; 'stop') [ -x /usr/lib/lpshut ] && /usr/lib/lpshut ;; *) esac echo "Usage: $0 { start stop }" exit 1 ;; 23

Příklady Skript case.sh: #!/bin/sh case "$1" in -[tt]) echo "Parametr -t nebo -T" ;; yes no) echo "Parametr yes nebo no" ;; *) echo "Neznany parametr." exit 1 ;; esac 24

Cyklus while Syntaxe while seznam_příkazů_1 Popis do done seznam_příkazů_2 Dokud seznam_příkazů_1 vrací nulový návratový kód, je prováděn seznam_příkazů_2. Cyklus je možno předčasně ukončit příkazem break. Předčasný návrat na začátek příkazu lze příkazem continue. 25

Příklady Skript while1.sh: #!/bin/sh MAX=5 I=1 while [ $I -le 10 ] do echo "Hodnota I je $I" I=`expr $I + 1` done 26

Příklady Skript while2.sh: #!/bin/sh while : do /bin/echo "Zadej cele cislo [0,...99][k=konec]: \c" read C case $C in k) break ;; [0-9] [0-9][0-9] ) echo "Druha mocnina cisla $C je `expr $C \* $C`." ;; *) echo "Spatny parametr." esac done 27

Cyklus until Syntaxe until seznam_příkazů_1 Popis do done seznam_příkazů_2 Obdoba příkazu while s obrácenou podmínkou. Dokud seznam_příkazů_1 vrací nenulový návratový kód, je prováděn seznam_příkazů_2. Příkazy break a continue lze použít jako u cyklu while. 28

Cyklus for Syntaxe for proměnná in seznam_argumentů do seznam_příkazů done Popis Cyklus for proběhne tolikrát, kolik má seznam_argumentů elementů. V každém cyklu nabývá proměnná hodnotu jednoho elementu ze seznam_argumentů. Příkazy break a continue lze použít jako u cyklu while. 29

Příklad Skript for.sh: #!/bin/sh I=1 for E in Petr Jana Jiri Karel do echo "Element $I je $E." I=`expr $I + 1` done 30