Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

2. diel - Skriptovanie v Bashi - premenné

V predchádzajúcej lekcii sme si vysvetlili rozdiel medzi kompilovaným a skriptovacím jazykom. Naučili sme si, na čo môžeme využiť Bash a napísali si prvý skript.

V tomto tutoriále skriptovania v Bashi si vysvetlíme, čo je to premenná, ako s ňou pracovať, a na čo ju pri skriptovaní budeme potrebovať.

Čo je to premenná

Premenná je miesto v pamäti, ktorému priradíme nejakú hodnotu. Na rozdiel od matematiky, kde premenná je časť rovnice alebo vzorca, v programovaní môžeme jednu premennú, resp. hodnotu v nej uchovávanú, použiť na niekoľkých miestach programu alebo aj v niekoľkých programoch.

A to je presne ten dôvod, prečo chceme v programovaní používať premenné. Ľudia sú od prírody leniví a hľadajú cesty, ako si uľahčiť, urýchliť a zefektívniť prácu. Nemusíme hovoriť počítaču, čo má urobiť zakaždým, keď to potrebujeme. Môžeme túto informáciu uchovať napr. v premennej a celý proces si následne zautomatizovať.

Priblížime si to na príklade. Máme program, ktorý po spustení vypíše uvítaciu vetu s menom prihláseného užívateľa:

Vítej uživateli ITnetwork!

Jednou z variant riešení je toto meno napísať ručne pre každého užívateľa zvlášť. Je to prakticky nemožná úloha, pretože by sme museli pre každého používateľa napísať vlastný program. Výrazne použiteľnejším variantom je vytvoriť miesto v pamäti (premennú) pomenovanú napr. UŽIVATEL, ktoré budeme priraďovať ako hodnotu meno práve prihláseného užívateľa:

UŽIVATEL=ITnetwork #k této proměnné se přiřadí jméno právě přihlášeného uživatele

Namiesto mena užívateľa potom napíšeme do vety názov premennej. V tej chvíli je nám jedno, kto práve spustil program, pretože sa vždy použije to správne meno.

Hodnota premennej UŽIVATEL sa v pamäti udrží len pokiaľ program beží. Toto je veľmi dôležité. Ak by premenné zostávali uchované v pamäti počítača aj po ukončení programu, za chvíľku by sme mali pamäť plnú a počítač by prestal fungovať.

Systémové premenné

V Linuxe sa budeme často stretávať s tzv. systémovými premennými. Sú to premenné pracujúce na úrovni operačného systému. Často slúži na jeho správnu funkčnosť. Najprv si vypíšeme do terminálu všetky naše systémové premenné príkazom printenv:

itnetwort@itnetwork:~$ printenv

SHELL=/bin/bash
HOME=/home/itnetwork
LANG=en_US.UTF-8
USER=itnetwork
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
…

Každý riadok začína názvom premennej, nasleduje = ako znak priradenia a hodnota, ktorá je premennej priradená. Napr. premennej USER je priradená hodnota názvu nášho užívateľského účtu, v tomto prípade itnetwork. Skúsime si túto hodnotu rovno vypísať do konzoly. Pred názov napíšeme znak dolára $. Tým povieme shellu, že máme na mysli premenou:

itnetwort@itnetwork:~$ echo “Vítej uživateli $USER!”

Vítej uživateli itnetwork!

Rovnako tak môžeme použiť premennú aj v skripte:

itnetwort@itnetwork:~$ touch pozdrav.sh
itnetwort@itnetwork:~$ echoecho Vítej uživateli $USER!” >> pozdrav.sh
itnetwort@itnetwork:~$ bash script.sh

Vítej uživateli itnetwork!

V príklade sme nenapísali príkaz do skriptu cez textový editor, ale pomocou echo. Príkazom echo s presmerovaním výstupu pomocou >>, vložíme nový riadok na koniec skriptu. Je to ďalšia možnosť, ako si môžeme zefektívniť prácu, prípadne ako zapisovať skriptom do iného súboru.

Nesmieme ale zameniť >> iba za jeden >, ktorý by obsah celého nášho skriptu prepísal.

Export

Môže sa stať, že jednu hodnotu potrebujeme použiť vo viacerých skriptoch. V každom skripte by sme si mohli vytvoriť premennú s touto hodnotou, ale to nie je efektívne. Ak by sme potom potrebovali túto hodnotu nahradiť inú, museli by sme ju prepísať v každom skripte zvlášť. Namiesto toho si vytvoríme novú systémovú premennú. K nej potom budú môcť pristupovať všetky programy. Slúži na to príkaz export:

itnetwort@itnetwork:~$ export CINNOST=”Učím se skriptovat v Bashi.”

Po vypísaní premenného prostredia príkazom printenv uvidíme v zozname nami novo vytvorenú premennú. Môžeme si ju skúsiť vypísať do terminálu:

itnetwort@itnetwork:~$ echo $CINNOST

Učím se skriptovat v Bashi.

Vytvorenie premennej by rovnako tak fungovalo aj bez použitia export. Avšak bolo by platné iba pre aktuálne prihláseného užívateľa. Ak by sme sa prihlásili ako root, premenná by už nefungovala. Novo vytvorená systémová premenná platí iba pre aktuálny shell a vypnutím systému zanikne.

Zmena systémovej premennej

Príkazom export môžeme tiež prepísať hodnotu systémovej premennej. Povedzme, že by sme potrebovali spúšťať náš skript v domovskom adresári z rôznych miest nášho systému. Pokiaľ nechceme zakaždým písať celú cestu ku skriptu, potrebujeme zapísať novú cestu do systémovej premennej PATH. Do tejto premennej sa zapisujú cesty a Linux sa sem pozerá vždy, keď zadáme príkaz do terminálu. V prípade, že tento program na jednej z ciest nájde, spustí ho. V opačnom prípade vráti chybu command not found.

Vytvoríme si nový skript s pozdravom v dokumentoch nášho domovského adresára a pridáme mu práva na spustenie. Môžeme spojiť príkazy v jeden pomocou tzv pipe (pajpy):

itnetwort@itnetwork:~$ touch $HOME/Dokumenty/pozdrav.sh | echo "echo Vítej uživateli $USER!" >> $HOME/Documenty/pozdrav.sh | chmod u+x $HOME/Documenty/pozdrav.sh

Keď sa teraz presunieme do základnej štruktúry príkazom cd / a skúsime spustiť náš script zadaním jeho názvu, shell nám vráti chybu, že príkaz nepozná. Musíme teda pridať cestu do premennej PATH:

itnetwort@itnetwork:~$ export PATH=$PATH:/home/itnetwork/Dokumenty

Príkazom export sme vytvorili novú premennú s už existujúcim názvom PATH. Tým sme prepísali tú pôvodnú. Ako novú hodnotu sme zvolili pôvodnú hodnotu a navyše k nej pridali ďalšiu cestu. Každá cesta v PATH je oddelená dvojbodkou:

itnetwort@itnetwork:~$ echo $PATH

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/itnetwork/Dokumenty

Teraz môžeme spúšťať skript jednoduchým zadaním jeho názvu z akéhokoľvek miesta systému. Ako sme si už povedali, premenná zostáva v pamäti iba do doby, kým program skončí. V tomto prípade do vypnutia systému.

Skript môže spúšťať iba užívateľ, ktorý má na to oprávnenie. V našom prípade iba vlastník.

Premenné v skripte

Teraz si ukážeme, ako pracovať s premennou priamo v skripte. Funguje to prakticky rovnako ako pri systémovej premennej, len nie je potrebný príkaz export. Použiť ju však môžeme iba vo vnútri skriptu:

#!/bin/bash
JMENO=ITnetwork

echo “Hodnota proměnné JMENO je $JMENO.”

Veľké písmená v názvoch premenných nie sú povinné. Rovnako tak budú fungovať aj malé písmená. Avšak z hľadiska lepšej čitateľnosti kódu je dobré túto konvenciu zachovať. Pozor, Bash je tzv. case sensitive. To znamená, že zápisy názvov premenných JMENO a Meno sú rôzne:

#!/bin/bash
JMENO=ITnetwork
Jmeno=Linux

echo “Hodnota proměnné JMENO je $JMENO.”
echo “Hodnota proměnné Jmeno je $Jmeno.”

Hodnotu, ktorú premenné priradíme môžeme ďalej v kóde prepisovať:

#!/bin/bash
JMENO=ITnetwork
echo “Hodnota proměnné JMENO je $JMENO.”
JMENO=David
echo “Hodnota proměnné JMENO je $JMENO.”

Po spustení skriptu získame tento výstup:

itnetwort@itnetwork:~$ bash script.sh
Hodnota proměnné JMENO je ITnetwork.
Hodnota proměnné JMENO je David.

Ako hodnotu môžeme priradiť aj inú premennú:

#!/bin/bash
JMENO1 = ITnetwork
JMENO2 = $JMENO1
echo "Hodnota proměnné JMENO2 je $JMENO2."

>>>>>
itnetwort@itnetwork:~$ bash script.sh
Hodnota proměnné JMENO2 je ITnetwork.

Zakázané názvy premenných

Ako už vieme, názov premennej môže obsahovať veľké aj malé písmená. Pre lepšiu čitateľnosť je lepšie voliť veľké písmená. Názov môže obsahovať aj čísla:

Jmeno1=ITnetwork #Toto je zcela legitimní způsob zápisu.

Problém nastáva vo chvíli, keď premenná začína číslicou, po ktorej nasledujú písmená. Takýto názov Bash neuzná. Ďalej nie sú povolené špeciálne znaky. Jediný povolený znak je _:

1UZIVATEL=ITnetwork #neplatný název proměnné
JMENO-UZIVATELE=ITnetvork #neplatný název proměnné
JMENO_UZIVATELE=ITnetwork #platný název proměnné

Teraz teda ovládame základnú prácu s premennými. V ďalších lekciách tieto znalosti často využijeme.

V budúcej lekcii si ukážeme, ako si vyžiadať vstup od užívateľa a ako tento vstup použiť ďalej v skripte. Tiež sa naučíme základné matematické operácie v Bashi.


 

Predchádzajúci článok
Skriptovanie v Bashi - úvod do skriptovania
Všetky články v sekcii
Skriptovanie v Bashi
Preskočiť článok
(neodporúčame)
Skriptovanie v Bashi - Užívateľský vstup a početné operácie
Článok pre vás napísal Václav Franz
Avatar
Užívateľské hodnotenie:
1 hlasov
Aktivity