C2110 Operační systém UNIX a základy programování B01: Skriptování PS/2022 Prezenční forma výuky: Rev4 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 iperační systém UNIX a základy programování B01: Bash - skriptování Bash https://www.gnu.org/software/bash/ >peracni system UNIX a zaklady programovani B01: Bash - skriptovani Bash - přehled Unixový shell (též příkazový procesor, v doslovném překladu „unixová skořápka'') je název textového uživatelského rozhraní, které je předchůdcem grafického uživatelského rozhraní. Jedním z unixových shellů je Bash. Bash je POSIX shell s řadou rozšíření. Je koncipován pro operační systémy založené na projektu GNU a je možné ho spustit na většině unixových operačních systémů. Je používán jako implicitní příkazový interpret v systémech postavených na linuxovém jádře, stejně jako i v Mac OS X nebo v systému Darvin. Je možné ho použít i v systému Microsoft Windows za použití subsystému pro unixové aplikace (SUA), nebo emulace POSIX pomocí softwaru Cygwin a MSYS. https://cs.wikipedia.org Dperační systém UNIX a základy programování B01: Bash - skriptování Interaktivní režim Prompt - typ uživatele / výzvy ($ běžný uživatel, # super uživatel, další možné %, >) Příkaz se vykoná zmáčknutím klávesy Enter. Historie: pomocí kurzorových šipek nahoru a dolů lze procházet seznamem již zadaných příkazů. Příkaz z historie lze znovu použít nebo upravit a upravený použít. Historie je přístupná i příkazem history. Automatické doplňování: zmáčknutím klávesy Tab (tabulátor) se interpret příkazové řádky snaží dokončit rozepsané slovo. Doplňují se jména příkazů, cesty a jména souborů (pokud jeden stisk nic nevyvolá, existuje více možností doplnění, opakovaný stisk je zobrazí). Shell interpretuje (expanduje) divoké znaky a jiné speciální znaky, před vlastním spuštění příkazu. V interaktivním režimu je možné spouštět řídící struktury jazyka bash. [kulhanek@wolf ~] $ y / t místo pro příkaz jméno uživatele jméno počítače / aktuální adresář (~ znamená domovský adresář /home/username) Interaktivní režim se ukončuje příkazem exit. iperační systém UNIX a základy programování B01: Bash - skriptování Skript v Bashi #!/bin/bash # toto je komentár echo 1 Toto je skript v interpretu Bash! 1 echo "Obsah adresáře xpwcT je:" ls # výpise obsah adresáre A=6 # nastaveni hodnoty proměnné A echo "Hodnota proměnné A je $A" echo "jeden prikaz"; echo "druhy prikaz" ./nuijprikaz prvni_argument druhy_argument V treti argument oj N c > c o > "a ro >i_ o Q_ ihned následuje nový řádek • prázdné řádky se ignorují • text uvozený znakem # se ignoruje (používá se ke komentovaní funkčnosti skriptu) • na jeden řádek lze uvést více příkazů, příkazy se oddělují středníkem ; • jeden příkaz lze napsat na více řádků pomocí zpětného lomítka \ )perační systém UNIX a základy programování B01: Bash - skriptování V čem psát skripty (a programy) Jelikož jsou skripty a zdrojové kódy programů textové soubory, lze použít libovolný textový editor umožňující uložení textu v čisté formě (bez formátovacích metadat). Textové editory: • vi • kwrite • kate • gedit K psaní skriptů a zdrojových kódů programů lze používat i specializované vývojové prostředí - IDE (Integrated Development Environment). IDE obsahuje kromě editoru i správce projektu, ladící nástroje (debugger) a další. Většinou dostupné pro komplexnější jazyky: C, C++, Fortran, JavaScript, Python, PHP, atd. Vývojové prostředí: • Kdevelop • qtcreator • NetBeans • Eclipse iperační systém UNIX a základy programování B01: Bash - skriptování -6- Vývojový diagram a skript v bashi writestr "Obsah adresáre je:" B 2= "7 pořadí vykonávání příkazů #!/bin/bash echo 1 Toto je skript v interpretu bash! ' echo "Obsah adresáře je:" ls iperační systém UNIX a základy programování B01: Bash - skriptování Neinteraktivní režim - skripty 1) Nepřímé spouštění Spouštíme interpreter jazyka a jako argument uvádíme jméno skriptu. $ bash muj skript v bashi Skripty nemusí mít nastaven příznak x (executable). 2) Přímé spouštění Spouštíme přímo skript (shell automaticky spustí interpreter). $ chmod u+x muj skript v bashi $./muj_skript_v_bashi Skripty musí mít nastaven příznak x (executable) a interpreter (součást skriptu). #!/bin/bash echo 1 Toto je skript v interpretu Bash! 1 iperační systém UNIX a základy programování B01: Bash - skriptování -8- Změna přístupových práv Přístupová práva určují jaké operace může uživatel provádět se soubory či adresáři v souborovém systému. Přístupová práva: r možnost číst soubor vypsat obsah adresáře w možnost měnit soubor změnit obsah adresáře (vytvořit či smazat soubor či adresář) x možnost spuštění souboru možnost vstoupit do adresáře Každý soubor či adresář má určeného vlastníka a skupinu uživatelů. Přístupová práva se uvádějí zvlášť pro vlastníka souboru (u), skupinu uživatelů (g) a ostatní uživatele (o). $ is -1 ___přístupová práva u g o -rw-rw-r— 1 kulhanek lcc 858 2008-10-17 11:58 skript.sh $ chmod u+x skript, sh přidání (+)/odebrání (-) práva $ ls -1 -rwxrw-r-- 1 kulhanek lcc 858 2008-10-17 11:58 skript.sh )perační systém UNIX a základy programování B01: Bash - skriptování Určení interpretru Specifikace interpretru (první řádek skriptu): # ! /absolútni/cesta/k/interpretru/skriptu Skript v bashi Skript v gnuplotu #!/bin/bash echo "Toto je skript v bashi!" #!/usr/bin/gnuplot set xrange[0:6] plot sin(x) pause -1 • Pokud není interpreter skriptu při jeho přímém spuštění uveden, použije se interpreter systémového shellu (bash). • Interpreter uvedený ve skriptu se ignoruje při nepřímém spuštění. • Interpretr je vhodné do skriptu vždy uvádět, protože je použit textovými editory pro zvýrazňování syntaxe. )perační systém UNIX a základy programování B01: Bash - skriptování Příkazy pro cvičení echo vypíše zadaný text (řetězec) grep vypíše řádky, které obsahují zadaný VZOR Ukázky použití: $ echo "Výsledek je:" vypíše řetězec "Výsledek je:" $ grep TEMP rst.out vypíše každý řádek ze souboru rst.out, který obsahuje řetězec "TEMP" Příkaz grep je velmi užitečný, proto vám doporučuji projít jeho podrobnou dokumentaci (man grep) iperační systém UNIX a základy programování B01: Bash - skriptování -11- Cvičení 1 Interaktivní režim: 1. V terminálu spusťte příkaz bash. Co se stalo? Druhé sezení ukončete příkazem exit. 2. Příkazem ps zjistěte číslo procesu, který interpretuje příkazovou řádku. 3. Proces ukončete příkazem kill (kill -9 PID, kde PID je číslo procesu). Co se stane? iperační systém UNIX a základy programování B01: Bash - skriptování -12- Cvičení 2 Skriptování: 1. Vytvořte adresář s názvem skript. 2. Do adresáře nakopírujte soubor skript.bash z adresáře /home/kulhanek/Documents/C2110/03.BASH/programs. 3. Skript skript.bash spusťte přímo. 4. Vytvořte adresář s názvem mereni. 5. Do adresáře nakopírujte soubor merenil.log z adresáře /home/kulhanek/Documents/C2110/03.BASH/data. 6. Ze souboru merenil.log extrahujte vhodnými příkazy řádek obsahující teplotu měření (popis dat je uveden v analyzovaném souboru). 7. V textovém editoru napište skript, který ze soubor merenil.log vypíše teplotu a tlak měření. iperační systém UNIX a základy programování B01: Bash - skriptování -13- Doplňující informace iperační systém UNIX a základy programování B01: Bash - skriptování Určení interpretru, II V případě, že se absolutní cesta k interpretru mění (např. při použití softwarových modulů), je vhodné použít následující konstrukci: #!/usr/bin/env interpreter Interpreter musí být v některém adresáři určeném systémovou proměnnou PATH. Skript v bashi #!/usr/bin/env bash echo "Toto je skript v bashi!" Skript v gnuplotu #!/usr/bin/env gnuplot set xrange[0:6] plot sin(x) pause -1 )perační systém UNIX a základy programování B01: Bash - skriptování