IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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 $JMENOecho “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: $BARVA1echo “Barva 2: $BARVA2echo “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: $1echo “Skriptovací jazyk: $2echo “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í
Syntax zápisu potom vyzerá takto:
#!/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.


 

Predchádzajúci článok
Skriptovanie v Bashi - premenné
Všetky články v sekcii
Skriptovanie v Bashi
Preskočiť článok
(neodporúčame)
Skriptovanie v Bashi - Matematické operácie a dátové typy
Článok pre vás napísal Václav Franz
Avatar
Užívateľské hodnotenie:
1 hlasov
Aktivity