← zpět

Úvod do Linuxu II

Co jsme dnes dělali

Shell skripty

Doteď jsme příkazy zadávali ručně jeden po druhém, případně jsme je kombinovali pomocí rour. Můžeme je ale psát do skriptů, které budou uložené v souboru a budeme je moct spouštět opakovaně. Práce v shellu se orientuje hlavně kolem souborů a práce s textem a daty.

Pro dnešní úlohy a pochopení tématu rozhodně doporučuji zeptat se nějaké formy inteligence (ať už umělé, nebo si přečíst nějaké zdroje). Vypíchl bych tyto:

Také doporučuji mít vedle terminálu po celou dobu otevřený super cheatsheet na syntax: https://devhints.io/bash

Základní syntax v Shellu

Nejdříve na Linuxovém stroji otevřete nějaký soubor, většinou jim dáváme příponu .sh. Pro otevření můžete použít textový editory micro. Takže např. micro pozdrav.sh.

Do souboru napište

#!/bin/bash

echo "Ahoj!"

První řádek říká systému, jak se má skript spouštět (tzv. shebang, teď mu tedy říkáme, že má obsah interpretovat jako shellový skript). Poté následuje řádek s výpisem textu.

Abychom mohli soubor spustit, musíme ho nejdřív označit jako spustitelný. To uděláme příkazem chmod +x pozdrav.sh. Skript následně spustíme jako ./pozdrav.sh.

V programech můžeme používat proměnné:

#!/bin/bash

jmeno="David"
echo "Ahoj, $jmeno!"

Program může přijímat argumenty:

#!/bin/bash

echo "Prvni argument: $1"
echo "Druhy argument: $2"

Zkuste tento program zavolat jako ./pozdrav.sh ahoj svete.

V programu můžeme používat podmínky:

#!/bin/bash

if [ $1 -gt 10 ]; then
    echo "Číslo je větší než 10"
else
    echo "Číslo je menší nebo rovno 10"
fi
#!/bin/bash

if [ -f "soubor.txt" ]; then
    echo "Soubor soubor.txt existuje a je to soubor"
else
    echo "Neexistuje"
fi

Negace podmínky se zapíše takto:

#!/bin/bash

if [ ! -f "soubor.txt" ]; then
    echo "Neexistuje"
fi

Do hranatých závorek určující podmínku se toto dá napsat mnohem více. Podívejte se to man test, případně do cheatsheetu.

Případně for cykly:

#!/bin/bash
for soubor in *.txt; do # Iteruj skrz vsechny soubory v tomto adresari ktere konci .txt
    echo "Zpracovavan: $soubor"
done

Úlohy

Zahřívačka

Napište skript info.sh, který vypíše

Analýza logu

Z minulé hodiny máte k dispozici access.log soubor. Napište skript analyze.sh, který přijme jako argument cestu k log souboru a vypíše

Nejspíš budete potřebovat uložit výstup programu do proměnné. To se dá udělat takto:

soubory=$( ls -l | sort )
echo "Soubory v adresari: $soubory"

Také ověřte, že byl argument skutečně zadán:

if [ -z "$1" ]; then
    echo "Pouziti: $0 <cesta_k_logu>"
    exit 1
fi

Hlídač IP adres

Napište skript suspicious.sh, který

Bonus: Upravte skript tak, aby výsledky zapsal do souboru report_<datum>.txt, kde <datum> je aktuální datum ve formátu YYYY-MM-DD. Použijte příkaz date.