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

Podobné dokumenty
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.

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

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

PROGRAMOVÁNÍ V SHELLU

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

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

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

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

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

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

Nastroje na zpracovani textu:

Skripty - úvod. Linux - skripty 2

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

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

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

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

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 do Operačních Systémů

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

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

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

Seznámení se shellem, textové editory numerické výpočty

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

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

PRACUJEME S SHELLEM Ať žije BASH.

Úvod. unx-predn_01-uvod.odt :13:43 1

UŽIVATEL, SKUPINA, PROCES

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

Příkazová řádka. predn_02.odt :55:55 1

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

Administrace OS Unix. Úvodní informace Principy administrace Uživatelé

Operační systémy. Cvičení 4: Programování v C pod Unixem

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

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

DUM 20 téma: Test dávky

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

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

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

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

LINUX uživatelské účty (1)

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

Speciální soubory. Editace příkazové řádky. $ fg mp3blaster $./skript.sh. [2]+ Stopped./skript.sh $ bg [2]+./skript.sh & $ fg 2./skript.

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

Lekce 25 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Úvod, jednoduché 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. pwd: vypíše cestu k aktuální pozici

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

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

Základní příkazy OS UNIX

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

PSK3-7. Plánované spouštění programů a správce sezení. Skupiny procesů

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

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Operační systém UNIX

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

Úvod do UNIXu. Jirka Boháč Gymnázium Jaroslava Seiferta 2003/2004

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

more Program se zastaví vždy po vypsání jedné stránky textu. Ukončení Ctrl+C less Umožňuje pohybovat se v souboru dopředu i dozadu.

Přednáška 6. Procesy a vlákna (vznik, stavy, atributy). Signály. Nástroje pro práci s procesy a vlákny. Úvod do Operačních Systémů Přednáška 6

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

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

Algoritmizace a programování

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

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

DUM 06 téma: Tvorba makra pomocí VBA

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

Administrace Unixu a sítí. Tomáš Kouba <

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

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

Základy algoritmizace a programování

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

Programovací jazyk Pascal

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

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

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

Úvod do programovacích jazyků (Java)

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

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

Systém souborů (File System)

programátorský manuál

Jazyk C# a platforma.net

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

Tahák na UOS 2008/2009

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

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Operační systémy. Cvičení 3: Programování v C pod Unixem

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

Úvod do programování. Lekce 1

Identita uživatele (procesu)

Programovani v Maplu Procedura

17. července :51 z moravec@yahoo.com

Konstruktory překladačů

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

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Popis programu EnicomD

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

Vstupní požadavky, doporučení a metodické pokyny

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

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

Transkript:

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. Explicitně je hodnota proměnné uložena jako řetězec. Lokální proměnná je známá pouze v instanci shellu, kde byla definována JMENO=HODNOTA Proměnná prostředí (exportovaná) proměnná se dědí (při vzniku potomka se překopíruje do prostředí potomka) JMENO=HODNOTA ; export JMENO export JMENO=HODNOTA (ne v sh) v sh je třeba export opakovat po každé změně proměnné 2

Předefinované proměnné Slouží k definování prostředí (např. PS1, SHELL, PATH...). Některé proměnné mají hodnotu nastavenu automaticky (např. PWD, HOME, $#, $1,...) jiné můžeme modifikovat (např. PATH, PS1,...). Úplný seznam předdefinovaných proměnných viz. např. man bash. Jméno proměnné HOME PWD LOGNAME HOSTNAME PS1, PS2,... PATH MANPATH IFS Význam proměnné domovský adresář pracovní adresář uživatelské jméno jméno počítače prompt 1. a 2. úrovně seznam adresářů, kde se hledají spustitelné programy seznam adresářů, kde se hledají man. stránky vstupní oddělovač (viz. příkaz read) 3

Předefinované proměnné II Jméno proměnné $# $0 $1,..., $9, ${10},... $* $@ "$*" "$@" Význam proměnné Počet parametrů skriptu Jméno skriptu Parametry skriptu (sh pouze $1,...,$9) $1 $2 $3... $1 $2 $3... "$1 $2 $3..." "$1" "$2" "$3"... 4

Hodnoty proměnných Syntaxe $JMENO ${JMENO} ${JMENO:-text} ${JMENO:=text} ${JMENO:?text} Význam hodnota proměnné hodnota proměnné je-li JMENO prázdné, pak vrátí text, jinak $JMENO je-li JMENO prázdné, pak JMENO=text a vrátí $JMENO je-li JMENO prázdné, pak vypíše text a končí (exit) Zobrazení hodnoty proměnné echo $JMENO; echo ${JMENO};... Zobrazení všech proměnných (lokální + exportovaných) set Zobrazení pouze exportovaných proměnných env Zrušení proměnné unset JMENO 5

Konstanty Definice JMENO=HODNOTA readonly JMENO typeset r JMENO=HODNOTA (ne sh) Přiřazení do konstanty způsobí chybu. 6

Celočíselné proměnné Umožňuje pouze ksh a bash. Definice typeset i JMENO=HODNOTA Přiřazení řetězce do celočíselné proměnné způsobí chybu (u ksh) nastaví 0 (u bash). 7

Pole Jednorozměrné. Index je číslo nebo celočíselná proměnná bez $ v rozsahu 0-4095. Přiřazení JMENO[index]=HODNOTA Hodnota položky ${JMENO[index]} Hodnoty všech definovaných položek ${JMENO[*]} Počet všech definovaných položek ${#JMENO[*]} 8

Vytvoření skriptu Skript obyčejný textový soubor, může obsahovat jednoduché a složené příkazy, definice proměnných, komentáře,... #!/bin/sh # komentar A=2 # komentar B=5 echo "Hodnota promenne A je $A" echo "Hodnota promenne B je $B" /bin/echo "Dnes je \c" date '+%d.%m.%y' 9

Spuštění skriptu v aktuální instanci shellu. skript (min. práva skriptu r--) v nové instanci shellu /bin/sh skript (min. práva skriptu r--)./skript (min. práva skriptu r-x) 10

Ladění skriptu v-mód = původní řádka ze skriptu se nejdříve vytiskne na standardní výstup a pak se spustí x-mod = provedou se náhrady spec. znaků na řádce, vytiskne se na standardní výstup a pak se spustí Ladění celého skriptu spustíme shell s parametrem -v spustíme shell s parametrem -x Ladění části skriptu povolení ladících výpisů pomocí set -v a set -x zakázání ladících výpisů pomocí set +v a set +x 11

Příklad Skript debug1.sh #!/bin/sh -vx # komentar A=2 # komentar B=5 echo "Hodnota promenne A je $A" echo "Hodnota promenne B je $B" /bin/echo "Dnes je \c" date '+%d.%m.%y' 12

Příklad Skript debug2.sh #!/bin/sh # komentar A=2 # komentar B=5 echo "Hodnota promenne A je $A" set -x # zacatek debugovani echo "Hodnota promenne B je $B" set +x # konec debugovani /bin/echo "Dnes je \c" date '+%d.%m.%y' 13

Parametry skriptu I Při spouštění skriptu se jméno skriptu a argumenty na příkazové řádce uloží do následujících proměnných: Jméno proměnné $# $0 $1,..., $9, ${10},... $* $@ "$*" "$@" Význam proměnné Počet parametrů skriptu Jméno skriptu Parametry skriptu (sh pouze $1,...,$9) $1 $2 $3... $1 $2 $3... "$1 $2 $3..." "$1" "$2" "$3"... 14

Příklad Skript param1.sh: #!/bin/sh echo "Jmeno skriptu: $0" echo "Pocet parametru: $#" echo "Hodnota \"\$*\": $*" echo "Hodnota \"\$@\": $@" echo echo "Hodnota 1. parametru: $1" echo "Hodnota 2. parametru: $2" 15

Parametry skriptu II Příkaz: set -- seznam parametrů rozdělí seznam parametrů podle $IFS a přiřadí je do $1,$2,$3... Příkaz: shift n posune hodnoty parametrů vlevo: $i = ${i+n} odebere parametry z $* a $@ dekrementuje: $# = $# - n 16

Příklad Skript param2.sh: #!/bin/bash echo "Pocet parametru: $#" while [ $# -gt 0 ] do echo "Hodnota \$#: $#" echo "Hodnota \$*: $*" echo "Hodnota \$@: $@" echo "Hodnota \$1: $1" echo shift done 17

Příklad Skript param3.sh: #!/bin/bash I=1 echo "Pocet parametru: $#" while [ $# -gt 0 ] do echo "Hodnota parametru $I: $1" shift I=`expr $I + 1` done 18

Příklad Skript param4.sh: #!/bin/sh echo "Pocet parametru: $#" echo I=1 for J # in "$@" do echo "Hodnota parametru $I: $J" I=`expr $I + 1` done 19

Příkaz read read P1 P2 P3 Přečte jednu řádku ze vstupu. Podle proměnné $IFS rozdělí načtenou řádku na jednotlivé hodnoty. Uloží první hodnotu do proměnné P1, druhou položku do proměnné P2 a ostatní hodnoty do proměnné P3. 20

Příklad Skript read1.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 21

Příklad Skript read2.sh: #!/bin/sh echo "Informace o uzivatelich v /etc/passwd" IFS=":" while read JMENO X UID GID POPIS DIR LOGSHELL do echo "Ucet $JMENO ma:" echo " UID=$UID" echo " GID=$GID" echo " HOME=$DIR" echo " SHELL=${LOGSHELL:-neni definovan}" done < /etc/passwd 22

Příklad Skript heslo.sh: #!/bin/sh /bin/echo "Zadej jmeno: \c" read JMENO stty -echo /bin/echo "Zadej heslo: \c" read HESLO stty echo echo echo echo "Jmeno je $JMENO" echo "Heslo je $HESLO" 23

Funkce I function jméno_funkce { seznam_příkazů } jméno_funkce () { seznam_příkazů } Funkce se volá jménem a volitelnými parametry Počet a hodnoty parametrů jsou uvnitř funkce dostupné pomocí $# a pozičních parametrů $1, $2,... Funkce může volat jinou funkci případně sebe rekurzivně. Návrat z funkce proběhne po provedení všech příkazů s návratovým kódem posledního provedeného příkazu nebo předčasně příkazem return návratový_kód. 24

Funkce II Proměnné deklarované uvnitř funkce existují i po návratu z funkce. Výjimku tvoří proměnné definované příkazem typeset (ne sh), které jsou po návratu z funkce zrušeny příkazem unset. Zobrazení nadefinovaných funkcí: set typeset f (sh) (ksh a bash) Zrušení funkce unset f funkce 25

Příklad Skript funkce1.sh: #!/bin/sh a() { echo "Pocet parametru funkce: $#" echo "Parametry funkce: $@" echo } echo "Pocet parametru skriptu: $#" echo "Parametry skriptu: $@" echo a aa bbb "ss ff" a 1 2 3 4 "5 6 7" 26

Příklad Skript funkce2.sh: #!/bin/sh maximum() { if [ $1 -gt $2 ] ; then echo "$1" else echo "$2" fi } if [ $# -ne 2 ] ; then echo "Pouziti: $0 num1 num2" exit 1 fi echo "Maximun je `maximum $1 $2` " 27

Konfigurační soubory shellu Shell Globální sobor Uživatelský soubor pro přihlašovací shell Uživatelský soubor pro další instanci shellu /bin/sh /etc/profile $HOME/.profile /bin/ksh /etc/profile $HOME/.profile $HOME/.kshrc [ ENV=.kshrc ] $HOME/.kshrc /bin/bash /etc/profile $HOME/.bash_profile $HOME/.bashrc [..$HOME/.bashrc ] $HOME/.bashrc 28