Šesté cvičení – Podmínky, if, cykly, aritmetika
Příkazy a plán:
- Aritmetika v shellu –
$((...))
- Aritmetické operátory
+-*/%
- Bitové operátory
&|^
- Bitové posuny
<< >>
- Proměnné
read a proměnná $IFS
- Cyklus
for x in ...; do ... done a příkaz seq
- Příkaz
test
= a != pro řetězce
-eq -ne -gt -gt -lt -le pro čísla
-e -d -f pro soubory
- Negace
!, and -a a or -o (plus závorky)
- Podmínka
if a cyklus while
- Pokročilejší kalkulačka
bc
Příklady:
- Napište skript, který přijme jako parametry dvě délky a vypíše obvod a obsah obdélníku jimi určeného.
- Napište skript, který přijme na standardním vstupu dvě délky a vypíše obvod a obsah obdélníku jimi určeného.
- Napište skript počítající součet čísel ze standardního vstupu (jedno číslo na řádek). Po skončení standadrního vstupu
(třeba pomocí
Ctrl+D) vypište na standardní výstup jejich součet.
- Vymyslete příkaz, který ke každému souboru v aktuální složce přidá příponu
.txt (s pomocí for cyklu)
- Změňte přitom názvy z velkých písmen na malé
- Co když budeme chtít příponu změnit? Třeba z
jpeg na jpg? Dá se použít expanze,
sed nebo příkazy basename a dirname
- Napište skript na počítání největšího společného dělitele
$1 a $2 Euklidovým algoritmem
- Napište třídící skript – dostane jako argumenty libovolný počet čísel a na výstup je vypíše v utříděném pořadí (nápověda: šikovně použijte
sort)
- Napište skript, který očekává řádky ve tvaru
a+b=c (bez mezer) a zkontroluje, že jsou správně (spočítá a + b a otestuje s c).
Pokud objeví chybu, vypíše číslo řádky, na které k ní došlo.
*/?>
Příklady pro pokročilé:
- Napište skript vypisující tabulku malé násobilky (pěkně formátovanou) – rozšíření: násobilka do čísla zadaného jako parametr
- Z minulého cvika: Napište skript, který s vámi bude hrát hádání čísel – Vymyslí si náhodné číslo (to můžete získat třeba z proměnné
$RANDOM) a uživatel bude postupně zadávat své
tipy. Skončí, když se uživatel trefí, nebo vypíše, zda je hádané číslo menší, nebo větší. Bonus: Pokud zavoláte skript s jedním argumentem, tak bude si vybere náhodné číslo z rozsahu
0 až zadaná horní mez.