Sedmé cvičení – Psaní skriptů II – aritmetika, řídící sekvence
Opakování z minula:
- Návratové kódy – každý příkaz po svém skončení nastaví návratový kód (jako return v C – 0 je OK, cokoliv jiného je chyba).
K výsledku se lze dostat v proměnné
$?
- Pomocí
&&
a ||
lze za sebe řetězit příkazy, fungují jako AND a OR.
Pokud napíšete prikaz1 && prikaz2
, tak druhý příkaz se provede pouze, pokud uspěje první. Naopak u prikaz1 || prikaz2
se druhý příkaz provede pouze, pokud první selže.
Příkazy a plán:
- Aritmetika v shellu –
$((...))
- Aritmetické operátory
+-*/%
- Bitové operátory
&|^
- Bitové posuny
<< >>
- Proměnné
- Pokročilejší kalkulačka
bc
read
a proměnná $IFS
- Řídící sekvence:
- Podmínka
if ...; then ...; fi
- Cyklus
while ...; do ...; done
- 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)
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í standardního vstupu
(třeba pomocí
Ctrl+D
) vypište na standardní výstup jejich součet.
- 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 si vybere náhodné číslo z rozsahu
0 až zadaná horní mez.
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é:
- [ze 6. cvičení] Napište skript vypisující tabulku malé násobilky (pěkně formátovanou) – rozšíření: násobilka do čísla zadaného jako parametr