Šesté cvičení – Skripty, proměnné

Příkazy a plán:

Příklady:

  1. Napište skript hello.sh, který vypíše Hello, world!, nastavte mu právo na spuštění a spusťte ho.
  2. Napište skript hello2.sh přijímající jeden parametr, který pozdraví aktuálně přihlášeného uživatele Ahoj <jmeno>, chci ti rict: <parametr>, nastavte mu právo na spuštění a spusťte ho.
    • Jméno uživatele zjistíte z proměnné $USER
    • První parametr dostanete v proměnné $1
    • Co dostane program v proměnné $0?
    • Upravte program, aby přijímal (a vypisoval) libovolný počet parametrů (aby šlo volat ./hello2.sh mej se stale lepe a lepe)
  3. Vzpomínka na první úkol: Uložte si do proměnné $datum aktuální datum (nápověda: zavolání subshellu)
  4. Uložte si své skripty do adresáře mujbin ve svém home a přidejte tento adresář do své $PATH (abyste mohli odkudkoliv volat své spustitelné soubory, aniž byste museli zadávat cestu k nim)
  5. Po provedení příkazu nastaví příkaz (podle svého výsledku) 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é $?
    • Zkuste si to třeba na příkazu ls – zadejte mu existující a neexistující cestu
  6. 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.
    • Napište skript, který vytvoří soubor (zadaný jako parametr) pouze, pokud soubor ještě neexistuje (pokud existuje, vypíše hlášku)

  7. Napište skript, který přijme jako parametry dvě délky a vypíše obvod a obsah obdélníku jimi určeného.
  8. 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.
  9. 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.
  10. 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
  11. Stáhněte si soubor aircrafts2.csv (data o nehodách letadel), třeba pomocí wget http://kam.mff.cuni.cz/~setnicka/static/aircrafts2.csv
    • Lehce opravený soubor z minulého cvika
    • Již má odstraněné uvozovky a políčka oddělená středníky

  12. Napište skript na počítání největšího společného dělitele $1 a $2 Euklidovým algoritmem
  13. 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)
  14. 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é:

  1. Napište skript vypisující tabulku malé násobilky (pěkně formátovanou) – rozšíření: násobilka do čísla zadaného jako parametr
  2. Napište skript, který vypíše své parametry v reverzním pořadí
  3. 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.