Osmé cvičení – Dodělání podmínek, find, xargs, regexy, základ sedu
Příkazy a plán:
- 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
read a proměnná $IFS – připomenutí
- Příkaz
grep a regulární výrazy
Názvosloví
- soubor – obecně jakýkoliv soubor včetně speciálních (složek, symlinků)
- normální soubor – obyčejný soubor (ve výpisu
ls má na začátku -)
- složka – speciální typ souboru
- symlink – speciální typ souboru
Příklady:
- 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, 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.
- Najděte všechny síťové uživatele (v labu pomocí
getent passwd), kteří mají křestní jméno stejné, jako to vaše
- Vypište ze souboru
/etc/apache2/httpd.conf všechny řádky, které nejsou zakomentované
- Příkaz
find hledá soubory (a složky) podle daných parametrů v zadaném umístění a provede s nimi akci (defaultní akce je vypsat jejich název)
find /cesta -name "*.txt" – najde ve složce (a podsložkách) /cesta všechny soubory s příponou .txt
- Filtrování:
-user, -
- Akce: print (default), delete, exec (dva druhy)
- Pokročilejší filtrování:
- Vypište všechny složky pod
/etc, které mají alespoň trojpísmenný název
- Vypište všechny symbolické linky v
/etc bez sestupování do podsložek (tedy už ne symlinky v /etc/neco/...)
- V adresáři
/etc najděte soubory, které jsou novější než /etc/passwd
- Vypište všechny normální soubory v
/etc, které nevlastí root
- Spočítejte velikost všech souborů v
/etc s příponou .sh
- Vypište všechny normální soubory v
/etc, které nevlastí root a pro každý z nich vypiště dlouhé informace pomocí ls -l
- Najděte všechny normální soubory v podstromě pod
/etc, jejich název má 4-7 znaků a začíná na "a"
*/?>
Příklady pro pokročilé:
- 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)