C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -1C2110 Operační systém UNIX a základy programování Petr Kulhánek kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta Masarykova univerzita, Kamenice 5, CZ-62500 Brno PS/2020 Distanční forma výuky: Rev2 6. lekce / modul 2 C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -2- Vstup/výstup C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -3Výstup: příkaz echo Příkaz echo slouží k neformátovanému výpisu do standardního výstupního proudu. Příkaz tiskne řetězce v zadaném pořadí oddělené mezerou. Syntaxe: echo [volby] [retezec1] [retezec2] ... Užitečné volby: -n neodřádkuje výstup Příklady: $ echo "Ema" "mele" "maso." Ema mele maso. $ echo "Ema mele maso." Ema mele maso. $ echo –n "Zadejte barvu: " $ A=5 $ echo "Hodnota promenne A je $A." Hodnota promenne A je 5. C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -4Cvičení I 1. V interaktivním režimu vyzkoušejte příklady uvedené na předchozí straně. C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -5Vstup: příkaz read Příkaz read slouží k čtení textu ze standardního vstupu (tj. pro interaktivní načítaní vstupu) a jeho uložení do proměnných. Příkaz načte vždy celý řádek, do první proměnné se uloží první slovo, ..., do poslední proměnné se uloží zbytek řádku. Syntaxe: read A # celý řádek se uloží do proměnné A read A B # první slovo se uloží do proměnné A # zbytek řádku do proměnné B Příklad: echo -n "Zadej hodnotu: " read A echo "Zadana hodnota je : $A" Pozor: nepoužívejte přikaz read ve spojení s rourami echo "text" | read A echo $A Nebude obsahovat hodnotu "text". Viz platnost proměnných v dceřiných procesech. C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -6Vstup: argumenty skriptu $ bash muj_skript_v_bashi arg1 arg2 arg3 $./muj_skript_v_bashi arg1 arg2 arg3 #!/bin/bash echo "Pocet zadanych argumentu: $#" echo "Prvni argument je: $1" echo "Druhy argument je: $2" echo "Vsechny zadane argumenty jsou: $*" echo "Nazev spusteneho skriptu: $0" 3 arg1 arg2 arg1 arg2 arg3 Použití a význam argumentů si určuje autor skriptu. ./muj_skript_v_bashi C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -7Argumenty skriptu - proměnné Argumenty skriptu (názvy speciálních proměnných): # počet argumentů, se kterými byl skript spuštěn 0 název spuštěného skriptu 1 … 9 hodnoty argumentů 1 až 9, se kterými byl skript spuštěn * všechny argumenty, se kterými byl skript spuštěn Pokud potřebujeme předat více jak devět argumentů, je nutné použít příkaz shift. Příkaz odstraní první argument ze seznamu argumentů. for((I=1;I <= $#;I++)); do echo $1 shift done Pokročilá práce s argumenty: Vypíše postupně zadané argumenty skriptu. "$@" všechny argumenty, se kterými byl skript spuštěn vložené do uvozovek (ošetřuje vstup, kde argumenty obsahují mezery) Rozdílné chování vůči $* nebo "$*"!! C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -8Cvičení II 1. Napište skript, který se dotáže uživatele na jeho oblíbenou barvu, kterou posléze vypíše na terminál. 2. Napište skript, který vypíše počet zadaných argumentů a hodnotu prvního argumentu. C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -9Výstup: příkaz printf Syntaxe: printf [format] [hodnota1] [hodnota2] ... "Cislo %5d ma hodnotu %03d" do tohoto místa vlož hodnotu1 v daném formátu Příkaz printf slouží k vypisování formátovaných textů a čísel. do tohoto místa vlož hodnotu2 v daném formátu C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -10Příkaz printf, formát Další informace: man bash, man printf %[priznak][delka][.presnost]typ celková délka pole počet míst za desetinou tečkou (reálná čísla) Příznak: - zarovnat doleva 0 prázdné místo zaplnit nulami + vždy uvést znaménko Typ: d celé číslo s řetezec (text) f reálné číslo Speciální znaky: \n konec řádku \r vrať se na začátek řádku %% znak % [] – volitelná část C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -11Příkaz printf, příklady $ I=10 $ B=12.345 $ printf "Hodnota promenne I je %d\n" $I Hodnota promenne I je 10 $ printf "Zadane cislo B je %10.4f\n" $B Zadane cislo B je 12.3450 $ printf "Zadane cislo B je %010.4f\n" $B Zadane cislo B je 00012.3450 $ printf "Zadane cislo B je %+010.4f\n" $B Zadane cislo B je +0012.3450 $ printf "Cislo I je %-5d a cislo B je %.1f\n" $I $B Cislo I je 10 a cislo B je 12.3 C2110 Operační systém UNIX a základy programování 7. lekce / modul 2 -12Cvičení III 1. Napište skript, který se dotáže uživatele na jeho oblíbenou barvu, kterou posléze vypíše na terminál. Dotaz vytiskněte tak, aby zadávaná barva byla na stejném řádku jako dotaz. 2. Procvičte si příkaz printf tak, že provedete příkazy uvedené v příkladech. 3. Napište skript, který vypíše první zadaný argument skriptu ve formátu %4d. 4. Napište skript, který načte ze standardního vstupu číslo a to vypíše následujícím způsobem: bude uvedeno znaménko, pro výpis se použije pět míst, prázdné místa budou vyplněny nulami: Zadane cislo je : +0003 5. Co se stane, pokud skriptu ze cvičení 4, předložíte číslo: 123456? 6. Napište skript, kterému se budou předkládat dvě čísla jako argumenty. Skript tyto čísla vypíše a dále vypíše jejich součet. 7. Napište skript, který se uživatele postupně zeptá na dvě čísla. Poté vypíše jejich součin.