3. diel - Skriptovanie v Bashi - Užívateľský vstup a početné operácie
V predchádzajúcej lekcii sme sa naučili základy premenného prostredia v Bashi. Ako systémových tak aj lokálnych v skripte.
V tomto tutoriále skriptovania v Bashi sa zameriame na užívateľský vstup. Ide o jednu z najdôležitejších vecí pri skriptovaní v Linuxe. Náš skript tým posunieme zo statického kódu na dynamický, kedy používateľ sám ovplyvňuje, aký výstup zo skriptu získa. V závere si potom prejdeme základné matematické operácie.
Príkaz read
Interakciu s užívateľom si na systéme vynútime príkazom
read
. Skúsme si teraz vyžiadať od užívateľa zadanie jeho
mena, ktoré následne využijeme v texte:
#!/bin/bash echo “Zadejte uživatelské jméno:” read JMENO echo “Vaše jméno je $JMENO”
Po spustení tohto skriptu sa do konzoly najskôr vypíše veta Zadajte
užívateľské meno: a na ďalšom riadku bude čakať výzva na zadanie
vstupu. Tento vstup sa uloží do premennej JMENO
a môžeme ho
následne využívať v kóde.
Pokiaľ chceme tieto dva riadky spojiť, stačí k read
pridať
prepínač -p
(prompt):
#!/bin/bash read -p “Zadejte uživatelské jméno: “ JMENO echo “Vaše jméno je $JMENO”
Názov premennej umiestnime na koniec riadku za úvodzovky. Tým Bash
spozná, že užívateľský vstup má uložiť práve tam. Niekedy nie je
vhodné, aby užívateľský vstup mohol prečítať každý, kto práve
užívateľovi pozerá cez rameno. Napr. pri zadávaní hesla alebo iných
citlivých informácií. Na to nám poslúži prepínač -s
(silence), ktorý skryje všetko, čo do terminálu napíšeme. Rovnako ako keď
napr. zadávame heslo pri použití príkazu sudo
:
#!/bin/bash read -p “Zadejte uživatelské jméno: “ JMENO read -sp “zadejte heslo: “ HESLO echo “Vaše jméno je $JMENO” echo “Vaše heslo je $HESLO”
Prepínač -sp
je potrebné zadať v tomto poradí.
Pokiaľ písmenká prehodíme, nebude fungovať.
Mnohonásobný vstup
Príkaz read
nám dáva viac možností využitia. Jednou z nich
je napr. mnohonásobný vstup, kedy v jednom riadku môžeme
uložiť hodnoty do viacerých premenných:
#!/bin/bash read -p “Zadejte vaše tři oblíbené barvy: “ BARVA1 BARVA2 BARVA3 echo “Vaše oblíbené barvy jsou: $BARVA1, $BARVA2 a $BARVA3”
Medzera pri zadávaní je signál pre Bash, že tu vstup končí a ďalej bude pokračovať vstup pre nasledujúcu premennú. Pokiaľ zadáme viac vstupov ako je premenných, všetky navyše sa uložia do poslednej premennej:
#!/bin/bash read -p “Zadejte vaše tři oblíbené barvy: “ BARVA1 BARVA2 BARVA3 echo “Barva 1: $BARVA1” echo “Barva 2: $BARVA2” echo “Barva 3: $BARVA3” >>>> itnetwort@itnetwork:~$ bash script.sh Zadejte vaše tři oblíbené barvy: zelená žlutá červená modrá hnědá Barva 1: zelená Barva 2: žlutá Barva 3: červená modrá hnědá
Východisková hodnota premennej
Pokiaľ budeme písať rozsiahly a sofistikovaný skript, môže nastať situácia, kedy užívateľ svoj vstup nezadá a len stlačí enter. Tým celý program spadne, pretože nebude vedieť čo robiť ďalej. Pre tieto účely môžeme nastaviť predvolenú (default) hodnotu premennej:
#!/bin/bash read -p “Zadejte vaši přezdívku: “ PREZDIVKA PREZDIVKA=”${PREZDIVKA:=anonym}”
V prípade, že používateľ nezadá svoju prezývku a len stlačí enter,
automaticky sa nastaví hodnota premennej PREZDIVKA
na
anonym.
Konštanta
Už vieme, že premenné sa dajú prepisovať. Môžeme tomu chcieť zabrániť, napr. ak skript upravuje viac ľudí. Pokiaľ nechceme, aby niekto omylom prepísal našu hodnotu, nastavíme ju ako konštantu. Inými slovami ju nastavíme iba na čítanie:
#!/bin/bash readonly EMAIL=”[email protected]”
Pokiaľ sa tejto konštante ďalej v kóde pokúsime nastaviť inú hodnotu, Bash to bude ignorovať a ponechá jej tú pôvodnú. Tieto konštanty je dobré umiestniť pod seba čo najvyššie v skripte, napr. hneď pod shebang. Pokiaľ budeme chcieť jednu z konštánt prepísať, rýchlo ju nájdeme a celý kód to robí prehľadnejšie.
Pozičné premenné
Užívateľský vstup môžeme zadať pri spúšťaní skriptu ako jeho parameter. Napr. týmto spôsobom:
itnetwort@itnetwork:~$ bash script.sh David Bash
Vaše jméno je David.
Váš skriptovací jazyk je Bash.
Slúžia na to pozičné premenné, ktoré zadávame v skripte pomocou čísel $1 až $9. Bash bude postupne priraďovať vstupy premenným podľa poradia, v akom sme ich zadali. Skript pre vyššie uvedený výstup by vyzeral takto:
#!/bin/bash echo “Vaše jméno je $1.” echo “Váš skriptovací jazyk je $2.”
Pozičná premenná $0
Špeciálnu funkciu má premenná $0
, ktorá vracia vždy názov
skriptu.
#!/bin/bash echo “Vaše jméno je $1.” echo “Název vašeho skriptu je $0.” >>>>> itnetwort@itnetwork:~$ bash script.sh David Vaše jméno je David. Název vašeho skriptu je script.sh.
Pokiaľ túto premennú použijeme mimo skriptu priamo v termináli, vráti nám náš predvolený shell:
itnetwort@itnetwork:~$ echo $0 /bin/bash
Výpis všetkých pozičných premenných
Ďalšia špeciálna premenná je $@
, ktorá vypíše hodnoty
všetkých pozičných premenných:
#!/bin/bash echo “Jméno: $1“ echo “Skriptovací jazyk: $2” echo “Dohromady: $@” >>>>> itnetwort@itnetwork:~$ bash script.sh David Bash Jméno: David Skriptovací jazyk: Bash Dohromady: David Bash
Matematické operácie
Bash nám umožňuje vykonávať základné matematické operácie. S použitím dodatočnej knižnice potom budeme môcť použiť aj pokročilé operácie. Pre základné operácie využívame štandardné znamienka tak, ako sme zvyknutí:
+ | Sčítanie |
- | Odčítanie |
* | Násobenie |
/ | Delenie |
% | Zvyšok po delení |
#!/bin/bash CISLO1=10 CISLO2=5 echo $((CISLO1 + CISLO2)) echo $((CISLO1 - CISLO2)) echo $((CISLO1 * CISLO2)) echo $((CISLO1 / CISLO2)) echo $((CISLO1 % CISLO2)) >>>>> itnetwort@itnetwork:~$ bash script.sh 15 5 50 2 0
Môžeme teda využiť užívateľský vstup a vytvoriť tak jednoduchú kalkulačku:
#!/bin/bash echo “Součet: $(($1 + $2))” echo “Rozdíl: $(($1 - $2))” echo “Součin: $(($1 * $2))” echo “Podíl: $(($1 / $2))” echo “Zbytek po dělení: $(($1 % $2))” >>>>> itnetwort@itnetwork:~$ bash script.sh 10 5 Součet: 15 Rozdíl: 5 Součin: 50 Podíl: 2 Zbytek po dělení: 0
Príkaz expr
Ďalším variantom zápisu aritmetických operácií je s použitím
príkazu expr
:
#!/bin/bash # Sčítání expr 10 + 5 # Odečítání expr 10 - 5 # Násobení expr 10 \* 5 # Dělení expr 10 / 5 # Zbytek po dělení expr 10 % 5
Pri použití *
to Bash vyhodnotí ako zástupný
znak a vráti tak syntaktickú chybu. Je preto potrebné tento znak escapovať
spätným lomítkom.
Rovnaký zápis s použitím premenných potom vyzerá takto:
#!/bin/bash echo “Součet: $(expr $1 + $2)” echo “Rozdíl: $(expr $1 - $2)” echo “Součin: $(expr $1 \* $2)” echo “Podíl: $(expr $1 / $2)” echo “Zbytek po dělení: $(expr $1 % $2)”
Je dôležité dodržať medzeru medzi číslom a operátorom. Bash to inak vyhodnotí ako bežný text.
Prehĺbili sme si naše znalosti premenných a vieme už použiť užívateľský vstup a základnú matematiku. Naše skripty sú už výrazne zaujímavejšie!
V budúcej lekcii, Skriptovanie v Bashi - Matematické operácie a dátové typy , sa pozrieme na pokročilé aritmetické operácie s využitím externého nástroja, počítanie s desatinnými číslami a dátové typy.