Linux - skripty
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu www.rvp.cz, ISSN: 1802-4785. Provozuje Národní ústav pro vzdělávání, školské poradenské zařízení a zařízení pro další vzdělávání pedogických pracovníků (N ÚV).
Skripty - úvod • Co jsou to skripty? Je to prostě jen seřazený seznam příkazů, které se mají vykonat. • Skriptování má své výhody. Takový skript nemusíte kompilovat • Spustíte jej na jakémkoli počítači (PC, Mac, Atari, Amiga, Sun, Sgi, ...) a operačním systému, kde běží Bash (Linux, BSD, Windows, MiNT, AIX, Solaris,..) • Skripty ukládáme do standardních textových souborů • Pro editaci používáme textové editory, které nepřidávají formátovací značky Linux - skripty
2
První skript • Výuku programování bývá zvykem začínat primitivním programem hello world • vytvoříme soubor první, s následujícím obsahem:
#!/bin/bash echo Hello world. • •
První řádka označuje, který interpret se má použít ke „spuštění“ příslušného souboru (bash). Na rozdíl od Windows v Linuxu nezáleží na příponě souboru ale na metadatech Příkaz echo vypíše na obrazovku (standartní výstup) následující text
Linux - skripty
3
Spuštění skriptu •
pro spuštění musíme souboru nastavit příslušné oprávnění, povolení spouštět:
chmod a+x první •
přepneme se do příkazového řádku a spustíme:
./první • programy v aktuálním adresáři je třeba spustit tak, že se na aktuální adresář odkážete v cestě • Cesta pro vyhledávání většinou obsahuje adresáře jako /bin nebo /usr/bin, v domovském adresáři uživatele • pokud soubor skriptu zkopírujeme tam, můžeme ho spouštět přímo: • první Linux - skripty
4
Podmínky • Průběh skriptu může někdy narazit na situaci, kde bude třeba o něčem rozhodnout • Za tímto účelem máme k dispozici podmínku: if [ podminka ]; then prikaz fi • Pokud je podmínka podminka pravdivá, provede se prikaz • Je však možné konstruovat i složitější podmínky, třeba jako je tato: if [ vyraz1 ]; then prikaz1 elif [ vyraz2 ]; then prikaz2 else prikaz3 fi Linux - skripty
5
Výrazy v podmínkách • • • • • • • • • • • •
! výraz negace výrazu výraz1 -a výraz2 logická spojka AND výraz1 -o výraz2 logická spojka OR -e soubor soubor existuje -f soubor soubor existuje a je to soubor -d soubor soubor existuje a je to adresář soubor1 -nt soubor2 soubor1 je novější než soubor2 soubor1 -ot soubor2 soubor1 je starší než soubor2 -n řetězec řetězec je neprázdný -z řetězec řetězec je prázdný řetězec1 = řetězec2 řetězce jsou shodné řetězec1 != řetězec2 řetězce jsou různé
Linux - skripty
6
Proměnné • Operační systémy se již dlouhou dobu neobejdou bez možnosti nastavit určité parametry za chodu. Využívá se k tomu nástroj zvaný proměnná prostředí Můžeme je vypsat příkazem env USER = jméno uživatele GROUPS = seznam skupin, jichž je současný uživatel členem HOME = domovský adresář HOSTNAME = jméno počítače OSTYPE = typ operačního systému PWD = aktuální pracovní adresář RANDOM = náhodné číslo do 0 do 32767 • můžeme vytvořit i vlastní proměnné
PROMENNA="Moje proměnná.„ • při použití proměnné získáme hodnotu pomocí $
echo $PROMENNA Linux - skripty
7
Cyklus Cyklus umožňuje provést určitou část skriptu vícekrát, třeba s různými parametry. FOR for (( a=1 ; $a-4 ; a=$a+1 )) do echo $a done První z nich přiřazuje proměnné a hodnotu 1. Provede se pouze na začátku prvního průchodu. Druhý výraz slouží k rozhodování, zda se má smyčka vykonat. K vykonání dojde, pokud bude mít zde uvedený výraz hodnotu různou od nuly. V prvním průchodu je a=1, takže a-4 není nula. Před každým dalším průchodem ale bude proveden třetí výraz, kde se hodnota a zvýší vždy o 1. Ve druhém průchodu tak nabyde hodnoty 2 a ve třetím 3 Po skončení třetího průchodu bude opět aplikován třetí výraz a hodnota a se tak zvýší na čtyři. Nyní je ovšem výsledkem druhého výrazu (a-4) nula, takže čtvrtý průchod smyčkou již neproběhne. Po spuštění uvidíte číslice 1, 2 a 3 Linux - skripty
8
while a until Cykly while a until pracují tak, že opakují určitý postup, dokud je splněna určitá podmínka (cyklus while) nebo dokud určitá podmínka splněna není (cyklus until). Syntaxe je prakticky shodná cislo=1 until [ $cislo -eq 5 ]; První cyklus se opakuje tak dlouho, do echo "$cislo" dokud nenastane jeho podmínka, tj. cislo=$((cislo+1)) dokud proměnná cislo nabyde done hodnoty 5. Druhý cyklus se opakuje while [ $cislo -gt 0 ]; tak dlouho, dokud je jeho podmínka do echo "$cislo" splněná, tj dokud je proměnná cislo cislo=$((cislo-1)) done větší než 0. Tento program vypíše: 123454321 Linux - skripty
9
Break a continue Někdy můžeme mít zájem běh nějakého cyklu ukončit úplně nebo nedokončit iteraci a provést další opakování. K tomu slouží příkazy break a continue: Když se do proměnné i dostala trojka, použili jsme příkaz continue, který přeskočil zbytek těla konstrukce for a přistoupil k další hodnotě, tedy ke čtyřce. V momentě, kdy se do proměnné i dostala pětka, provedl se příkaz break, který ukončil provádění celého cyklu.
for i in 1 2 3 4 5 6; do if [ $i -eq 3 ]; then continue elif [ $i -eq 5 ]; then break fi echo $i done Výstupem tohoto skriptu bude 1 Linux 2 4- skripty
10