Skripty - pokračování

Aritmetická expanze:

Používá se pro počítání (aritmetické operace) s proměnnými. Provádí operace sčítání +, odečítání -, násobení *, dělení /, zbytek po dělení %.

Formát:

$((vyraz))

Př.: příklady výrazů uvnitř $((vyraz))

1+2

4/2

$A+1

$A+$B

Př.: napište skript dve_cisla, který načte 2 čísla a provede jejich součet, rozdíl, součin a podíl.

#!/bin/bash

#Tento skript nacita 2 cisla a provadi s nimi

#aritmeticke operace pomoci aritmeticke expanze

echo "Zadej cislo A:"

read A

echo "Zadej cislo B:"

read B

echo "Soucet cisel A a B je $(($A+$B))"

echo "Rozdil cisel A a B je $(($A-$B))"

echo "Soucin cisel A a B je $(($A*$B))"

echo "Podil cisel A a B je $(($A/$B))"

Př.: modifikujte skript dve_cisla tak, aby vstupní čísla načítal pomocí pozičních parametrů...

Použití skriptu:

dve_cisla_podruhe 4 10

Příkaz "větvení" – IF

Formát:

if podminka

then prikazy1

else prikazy2

fi

Pokud je podmínka splněna, provedou se prikazy1, jinak se provedou prikazy2.

Př.: modifikujte skript telefon , který vyhledává v telefonním seznamu (v souboru seznam.txt) tak, aby v případě, že jméno v seznamu nenajde, vypsal hlášení.

#!/bin/ksh

#Tento skript hleda zadane jmeno v souboru seznam.txt

#Zadani jmena:

echo Zadej hledane jmeno

read jmeno

#Kontrolni vypis promenne, zda se ulozila spravne

echo Myslis opravdu toto jmeno?

echo $jmeno

#samotne vyhledavani v souboru seznam.txt

#s podminkou, která vypisuje hlaseni

if grep $jmeno seznam.txt >/dev/null

then echo "Telefon je: `grep $jmeno seznam.txt`

else echo "Toto jmeno $jmeno neznam!"

fi

Jak tvořit podmínku – příkaz test

Formát:

[ podmínka ]

Př.: příklady podmínek uvnitř [ ]. Více v "man test "

-f soubor	soubor existuje

-r soubor	soubor exisuje a lze jej číst

řetězec1 = řetězec2	řetězec1 je shodný s řetězcem2

řetězec1 != řetězec2	řetězce se neshodují

-z řetězec	řetězec má nulovou délku

číslo1 -eq číslo2	číslo1 = číslo2 (equal)

číslo1 -ne číslo2	číslo1 se nerovná číslo2 (not equal)

číslo1 -lt číslo2	číslo1  číslo2 (lower than)

analog. -gt (greater than), -le (lower or equal) -ge (greater or equal)...

Př.: skript, který otestuje, zda jste v domovském adresáři, a podle výsledku vypíše buď "Jste doma!" anebo "Jste v adresáři..."

#!/bin/bash

#tento skript testuje, v jakem adresari

#se nachazim

if [ `pwd` = $HOME ]

then echo "Jste doma"

else echo "Jste v adresari "

pwd

fi

Př.: skript, který vypíše soubor uvedený jako první (poziční) parametr programu. Pokud soubor nelze vypsat, vypíše se hlášení.

#!/bin/bash

#tento skript vypisuje soubor anebo hlasi,

#ze to nejde

if [ -r $1 ]

then cat $1

else echo "Soubor $1 nelze vypsat"

fi

Příkaz "cyklu" – FOR

Formát:

for promenna in seznam

do

prikazy

done

Pro všechny položky v seznamu vykonává definovanou činnost.

Př.: skript vypisující obsah 3 proměnných.

#!/bin/bash

#

for P in "a b c"

do

echo $P

done

Seznam lze vytvořit i vykonáním nějakého příkazu, např. ls, cat.

Př.: skript kolecko, který vypíše postupně řádky souboru kolo.seznam

#!/bin/bash

#

for i in `cat kolo.seznam`

do

echo Tohle je $i

done

Příkaz "cyklu s podmínkou" – WHILE

Formát:

while podminka

do

prikazy

done

"pokud platí, že..." (pokud návratový kód = 0).

Podmínka se tvoří stejně jako pro příkaz if. Dokud podmínka platí, provádí se příkazy. V okamžiku, kdy přestane platit, přestanou se provádět.

Př.: skript kolecko, který vypíše postupně řádky souboru kolo.seznam

#!/bin/bash

#skript, který napocita do 10

start=1

end=1

echo "Zacnu na cisle $start "

echo "a skoncim na cisle $end "

while [ $start -le $end ]

do

echo $start

start = $(($start+1))

done

Analog. Příkaz "cyklu s podmínkou" – UNTIL

vykonává příkazy, pokud podmínka NENÍ splněna, návratový kód je = 1 (false). Jakmile podmínka JE splněna, cyklus končí.

"Vícecestná" podmínka – CASE

case text in

text1) prikazy;;

text2) prikazy;;

…

textn) prikazy;;

esac

Př.: skript budik, který v závislosi na denní či noční době vypisuje hlášky.

#!/bin/bash

h=`date +"%l"`

#echo $h

case $h in

0*) echo "Sladke sny...";;

?6*) echo "Je cas vstavat!";;

?7*) echo "Ale uz vazne vstavej!";;

?9) echo "Odchod do UNIXu!";;

10) echo "Jeste stale programujeme...";;

12) echo "Cas na obed!";;

18) echo "Jdeme domu...";;

19) echo "Vecernicek";;

2*) echo "Jdi spat!";;

*) echo "UNIX Forever!";;

esac

2007-02-27T18:04:13