Skriptování shellu (bash)

Skript shellu je textový soubor se seznamem příkazů shellu, který se spouští jako program a provádí úlohu nebo sadu úloh. Hlavním cílem shellového skriptu je automatizace úloh a úspora času. Je důležité pochopit základní strukturu shellového skriptu, protože právě prostřednictvím shellových skriptů komunikujete s výpočetním clusterem (viz další kapitola o Grid Engine)

co je to Bash ?

V systémech podobných Unixu existuje mnoho různých shellů. Bourne Again Shell (Bash) je jedním z nich, je to výchozí shell v systémech GNU/Linux. Oproti ostatním shellům má některé výhody a je v podstatě standardním shellem a my si níže ukážeme, jak jej použít pro psaní skriptů.

Psaní jednoduchého shellového skriptu bash

Základní shellový skript je pouze série příkazů. Právě to si ukážeme dále.

Napíšeme si jednoduchý skript, který pomocí příkazu echo vypíše na obrazovku „hello world“. Textový soubor uložíme jako myScript.sh

 #!/bin/bash echo Hello World

syntaxe shellového skriptu:bash your-script-name. V našem případě napíšeme:

$ bash myScript.sh Hello World

složitější příklad

Napíšeme trochu složitější skript s použitím více příkazů shellu. Skript používá příkaz ls pro výpis souborů a příkaz wc -l, který počítá počet řádků v daném souboru nebo na standardním vstupu. V tomto případě příkaz wc -l počítá počet řádků na výstupu příkazu ls -l. Toho všeho dosáhneme pomocí roury |.

Obsah skriptu.sh:

 #!/bin/bash echo here are the list of files ls -l echo The number of files: ls -l | wc -l 

Můžeme jej spustit následujícím způsobem:

$ bash script.sh

proměnné ve skriptech bash

Ve skriptech bash můžete také použít proměnné. Které jsou užitečné pro zachycení výstupu mezipříkazů a jejich použití pro spuštění dalších příkazů. pro proměnné neexistují žádné datové typy. Proměnná v bashi může obsahovat některou z následujících položek: číslo, znak nebo řetězec znaků.

Proměnnou nemusíte deklarovat, stačí přiřadit hodnotu k odkazu na ni.

Nyní vytvoříme jednoduchý skript s jednou proměnnou. Této proměnné přiřadíme řetězec Hello world a vypíšeme ji pomocí echo.

 #!/bin/bash VAR="Hello world" echo $VAR 

Při přiřazování proměnné jsme nepoužili znak $, ale při použití proměnné jsme museli použít znak $.

argumenty příkazového řádku ve skriptech bash

Skript může přijímat i argumenty příkazového řádku. Zde upravíme skript, který vypisuje soubor, aby přijímal argument příkazového řádku. Argumentem bude cesta k adresáři.

obsah skriptu2.sh:

 #!/bin/bash VAR= echo here are the list of files ls -l $VAR echo The number of files: ls -l $VAR | wc -l 

Takto se spustí skript:

$ bash script2.sh /home/user/project

Argumenty jsou uloženy v proměnných s číslem v pořadí argumentu počínaje 1

  • První argument:
  • Druhý argument: $2
  • a tak dále…

V našem případě odpovídá /home/user/project.

Aritmetické operace skriptů bash

Aritmetické operace s celými čísly v bashi se provádějí v následujícím formátu:

#!/bin/bash x=6 y=2 $((10 - 5)) $((x-y)) echo $((x-y)) echo $((10-5))

Tyto příkazy můžete také zkopírovat a vložit do konzoly, abyste viděli, jak fungují. Příkazy echo by měly vypsat 4 a 5.

Aritmetika v bashi nepodporuje operace s plovoucí desetinnou čárkou (např. operace 1,3 -1 nebude v bashi fungovat), musíte použít příkaz bc. Příklad použití příkazu bc naleznete v tomto příkladu na stackOverflow.

Looping nad soubory

Pokoušíte-li se automatizovat úlohu pomocí skriptů bash, je velmi pravděpodobné, že budete muset použít určité příkazy na každý soubor v adresáři. Toho lze dosáhnout pomocí smyček s divokými znaky* a for. Následující skript uloží všechny soubory ‚.txt‘ v adresáři /path/to do proměnné FILES. Pak pro každý soubor vypočítá počet řádků a ten vypíše příkazem wc -l.

#!/bin/bash FILES=/path/to/*.txt for f in $FILES do echo "Processing $f file..." # count number of lines and output that for file $f wc -l $f done 

Další informace o skriptech bash

Skripty shellu lze psát i složitěji s využitím řídicích struktur (smyčky if/else, for/while) a dosáhnout tak mnoha věcí jen pomocí skriptování shellu, ale to už je nad rámec tohoto dokumentu. Pokud se chcete v psaní shellových skriptů zlepšit, podívejte se na níže uvedené odkazy.

  • http://www.freeos.com/guides/lsst/
  • http://www.tldp.org/LDP/Bash-Beginners-Guide/html/

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.