Content is user-generated and unverified.

Praktický návod: Základy bash skriptování v Linuxu

Cíl cvičení

Naučíte se vytvářet jednoduché bash skripty pro automatizaci opakujících se úloh. Zvládnete práci s proměnnými, podmínkami, cykly a uživatelským vstupem. Tyto dovednosti jsou základem pro automatizaci systémové správy.


Krok 1: Přihlášení do systému

Uživatelské jméno: kali
Heslo: kali

Jste přihlášeni jako standardní uživatel s právem sudo.


Krok 2: Vytvoření prvního skriptu

Vytvoříte jednoduchý bash skript a naučíte se ho spustit.

Vytvoření adresáře pro skripty:

bash
mkdir ~/skripty
cd ~/skripty

Vytvoření prvního skriptu:

bash
nano pozdrav.sh

Obsah skriptu (napište do editoru nano):

bash
#!/bin/bash
# Můj první bash skript

echo "Ahoj! Vítej v bash skriptování!"
echo "Dnes je: $(date)"
echo "Jsi přihlášen jako: $(whoami)"
echo "Tvůj domovský adresář je: $HOME"

Uložení: Ctrl+O, Enter, Ctrl+X

Co znamená každý řádek:

  • #!/bin/bash = shebang - určuje, že skript se má spustit v bash
  • # Můj první... = komentář (ignoruje se při spuštění)
  • echo = vypiš text
  • $(date) = spustí příkaz date a vloží výsledek
  • $HOME = proměnná prostředí s cestou k domovskému adresáři

Nastavení práv pro spuštění:

bash
chmod +x pozdrav.sh

Co se děje:

  • chmod +x = přidá právo execute (spouštění)
  • Bez tohoto práva by skript nešel spustit jako program

Spuštění skriptu:

bash
./pozdrav.sh

Co se děje:

  • ./ = spusť soubor z aktuálního adresáře
  • Skript vypíše uvítací zprávu s aktuálními informacemi

Krok 3: Práce s proměnnými

Naučíte se ukládat a používat proměnné ve skriptech.

Vytvoření skriptu s proměnnými:

bash
nano promenne.sh

Obsah skriptu:

bash
#!/bin/bash
# Skript demonstrující práci s proměnnými

# Definice proměnných
JMENO="Student"
VEK=18
MESTO="Praha"

# Výpis proměnných
echo "Jméno: $JMENO"
echo "Věk: $VEK"
echo "Město: $MESTO"

# Výpočty s proměnnými
NASLEDUJICI_ROK=$((VEK + 1))
echo "Příští rok ti bude: $NASLEDUJICI_ROK"

# Systémové proměnné
echo "Počet procesorů: $(nproc)"
echo "Volná paměť: $(free -h | grep Mem | awk '{print $4}')"

Uložení a spuštění:

bash
chmod +x promenne.sh
./promenne.sh

Co se děje:

  • Proměnné se definují bez mezery kolem =
  • K hodnotě přistupujeme pomocí $NAZEV
  • $(( )) = aritmetická operace
  • $(příkaz) = vloží výstup příkazu

Krok 4: Uživatelský vstup a interakce

Vytvoříte interaktivní skript, který požaduje vstup od uživatele.

Vytvoření interaktivního skriptu:

bash
nano dotaznik.sh

Obsah skriptu:

bash
#!/bin/bash
# Interaktivní skript s uživatelským vstupem

echo "=== Jednoduchý dotazník ==="
echo

# Čtení vstupu od uživatele
read -p "Jak se jmenuješ? " JMENO
read -p "Kolik je ti let? " VEK
read -p "Jaký je tvůj oblíbený programovací jazyk? " JAZYK

# Zpracování a výpis
echo
echo "=== Shrnutí ==="
echo "Jmenuješ se: $JMENO"
echo "Je ti: $VEK let"
echo "Oblíbený jazyk: $JAZYK"

# Uložení do souboru
echo "$JMENO,$VEK,$JAZYK" >> odpovedi.csv
echo
echo "Odpovědi uloženy do souboru odpovedi.csv"

Uložení a spuštění:

bash
chmod +x dotaznik.sh
./dotaznik.sh

Co se děje:

  • read -p "text" PROMENNA = zobraz text a čti vstup do proměnné
  • >> = připoj na konec souboru (nemazej původní obsah)
  • Každé spuštění přidá jeden řádek do CSV souboru

Zobrazení uložených odpovědí:

bash
cat odpovedi.csv

Krok 5: Podmínky a větvení

Naučíte se používat if-else podmínky pro rozhodování ve skriptech.

Vytvoření skriptu s podmínkami:

bash
nano kontrola.sh

Obsah skriptu:

bash
#!/bin/bash
# Skript s podmínkami

read -p "Zadej číslo: " CISLO

# Kontrola, zda je číslo kladné, záporné nebo nula
if [ $CISLO -gt 0 ]; then
    echo "Číslo $CISLO je kladné"
elif [ $CISLO -lt 0 ]; then
    echo "Číslo $CISLO je záporné"
else
    echo "Číslo je nula"
fi

# Kontrola existence souboru
read -p "Zadej název souboru k ověření: " SOUBOR

if [ -f "$SOUBOR" ]; then
    echo "Soubor $SOUBOR existuje"
    echo "Velikost: $(du -h "$SOUBOR" | cut -f1)"
else
    echo "Soubor $SOUBOR neexistuje"
fi

# Kontrola volného místa
VOLNE_MISTO=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')

if [ $VOLNE_MISTO -gt 80 ]; then
    echo "VAROVÁNÍ: Disk je zaplněn z $VOLNE_MISTO%!"
else
    echo "Využití disku: $VOLNE_MISTO% - OK"
fi

Uložení a spuštění:

bash
chmod +x kontrola.sh
./kontrola.sh

Operátory pro porovnání:

  • -eq = equal (rovná se)
  • -ne = not equal (nerovná se)
  • -gt = greater than (větší než)
  • -lt = less than (menší než)
  • -ge = greater or equal (větší nebo rovno)
  • -le = less or equal (menší nebo rovno)

Testování souborů:

  • -f soubor = soubor existuje a je běžný soubor
  • -d adresar = adresář existuje
  • -r soubor = soubor je čitelný
  • -w soubor = soubor je zapisovatelný
  • -x soubor = soubor je spustitelný

Krok 6: Cykly a opakování

Naučíte se používat cykly pro opakování operací.

Vytvoření skriptu s cykly:

bash
nano cykly.sh

Obsah skriptu:

bash
#!/bin/bash
# Skript demonstrující cykly

echo "=== FOR cyklus - počítání 1 až 5 ==="
for i in 1 2 3 4 5
do
    echo "Iterace číslo: $i"
done

echo
echo "=== FOR cyklus - procházení souborů ==="
for soubor in *.sh
do
    echo "Skript: $soubor"
done

echo
echo "=== WHILE cyklus - odpočet ==="
POCET=5
while [ $POCET -gt 0 ]
do
    echo "Zbývá: $POCET"
    POCET=$((POCET - 1))
    sleep 1
done
echo "Konec!"

echo
echo "=== Vytvoření záložních kopií ==="
for skript in *.sh
do
    cp "$skript" "${skript}.backup"
    echo "Vytvořena záloha: ${skript}.backup"
done

Uložení a spuštění:

bash
chmod +x cykly.sh
./cykly.sh

Co se děje:

  • for promenna in seznam = projdi všechny položky v seznamu
  • *.sh = všechny soubory končící na .sh
  • while [ podminka ] = opakuj, dokud platí podmínka
  • sleep 1 = pozastav na 1 sekundu

Krok 7: Funkce a parametry

Vytvoříte skript s vlastními funkcemi a naučíte se předávat parametry.

Vytvoření skriptu s funkcemi:

bash
nano funkce.sh

Obsah skriptu:

bash
#!/bin/bash
# Skript s funkcemi

# Definice funkce pro pozdrav
pozdrav() {
    echo "Ahoj, $1!"
    echo "Vítej v bash skriptování."
}

# Definice funkce pro výpočet
soucet() {
    VYSLEDEK=$(($1 + $2))
    echo "Součet $1 + $2 = $VYSLEDEK"
}

# Funkce pro vytvoření zálohy souboru
zalohuj() {
    if [ -f "$1" ]; then
        DATUM=$(date +%Y%m%d_%H%M%S)
        cp "$1" "${1}.${DATUM}.backup"
        echo "Vytvořena záloha: ${1}.${DATUM}.backup"
    else
        echo "Chyba: Soubor $1 neexistuje!"
        return 1
    fi
}

# Funkce pro informace o systému
system_info() {
    echo "=== Systémové informace ==="
    echo "Hostname: $(hostname)"
    echo "Uživatel: $(whoami)"
    echo "Uptime: $(uptime -p)"
    echo "Paměť: $(free -h | grep Mem | awk '{print $3 "/" $2}')"
}

# Volání funkcí
echo "=== Test funkcí ==="
pozdrav "Studente"
echo
soucet 15 27
echo
zalohuj "pozdrav.sh"
echo
system_info

# Práce s parametry skriptu
echo
echo "=== Parametry skriptu ==="
echo "Název skriptu: $0"
echo "První parametr: $1"
echo "Druhý parametr: $2"
echo "Počet parametrů: $#"
echo "Všechny parametry: $@"

Uložení a spuštění s parametry:

bash
chmod +x funkce.sh
./funkce.sh parametr1 parametr2 parametr3

Co se děje:

  • Funkce se definují pomocí nazev() { příkazy }
  • $1, $2, $3... = parametry funkce nebo skriptu
  • $# = počet parametrů
  • $@ = všechny parametry
  • return = vrácení návratové hodnoty (0 = úspěch, jinak chyba)

Krok 8: Praktický užitečný skript

Vytvoříte komplexnější skript pro zálohování adresáře.

Vytvoření zálohovacího skriptu:

bash
nano zaloha.sh

Obsah skriptu:

bash
#!/bin/bash
# Automatický zálohovací skript

# Konfigurace
ZDROJOVY_ADRESAR="$HOME/dokumenty"
CILOVY_ADRESAR="$HOME/zalohy"
DATUM=$(date +%Y%m%d_%H%M%S)
NAZEV_ZALOHY="zaloha_${DATUM}.tar.gz"

# Vytvoření adresáře pro zálohy, pokud neexistuje
if [ ! -d "$CILOVY_ADRESAR" ]; then
    mkdir -p "$CILOVY_ADRESAR"
    echo "Vytvořen adresář: $CILOVY_ADRESAR"
fi

# Kontrola existence zdrojového adresáře
if [ ! -d "$ZDROJOVY_ADRESAR" ]; then
    echo "CHYBA: Zdrojový adresář $ZDROJOVY_ADRESAR neexistuje!"
    echo "Vytvářím testovací adresář..."
    mkdir -p "$ZDROJOVY_ADRESAR"
    echo "Testovací soubor" > "$ZDROJOVY_ADRESAR/test.txt"
fi

# Zobrazení informací
echo "=== Zálohovací skript ==="
echo "Zdroj: $ZDROJOVY_ADRESAR"
echo "Cíl: $CILOVY_ADRESAR/$NAZEV_ZALOHY"
echo

# Vytvoření zálohy
echo "Vytvářím zálohu..."
tar -czf "$CILOVY_ADRESAR/$NAZEV_ZALOHY" "$ZDROJOVY_ADRESAR" 2>/dev/null

# Kontrola úspěšnosti
if [ $? -eq 0 ]; then
    VELIKOST=$(du -h "$CILOVY_ADRESAR/$NAZEV_ZALOHY" | cut -f1)
    echo "✓ Záloha úspěšně vytvořena!"
    echo "  Velikost: $VELIKOST"
    echo "  Umístění: $CILOVY_ADRESAR/$NAZEV_ZALOHY"
else
    echo "✗ Chyba při vytváření zálohy!"
    exit 1
fi

# Smazání starých záloh (starších než 7 dní)
echo
echo "Mazání starých záloh (>7 dní)..."
SMAZANO=$(find "$CILOVY_ADRESAR" -name "zaloha_*.tar.gz" -type f -mtime +7 -delete -print | wc -l)
echo "Smazáno $SMAZANO starých záloh"

# Seznam všech záloh
echo
echo "=== Dostupné zálohy ==="
ls -lh "$CILOVY_ADRESAR"/*.tar.gz 2>/dev/null | awk '{print $9, "(" $5 ")"}'

echo
echo "Záloha dokončena!"

Uložení a spuštění:

bash
chmod +x zaloha.sh
./zaloha.sh

Co se děje:

  • Skript automaticky zálohuje adresář do komprimovaného archivu
  • Přidává časovou značku k názvu zálohy
  • Maže staré zálohy (>7 dní)
  • Kontroluje úspěšnost operace
  • Používá pokročilé techniky (podmínky, proměnné, příkazy)

Krok 9: Kontrola učitelkou ⭐

PŘIHLASTE SE O KONTROLU K UČITELCE

Připravte si následující k prezentaci:

  1. Všechny vytvořené skripty v adresáři ~/skripty
  2. Spuštění skriptu pozdrav.sh
  3. Interaktivní dotazník (dotaznik.sh) a soubor odpovedi.csv
  4. Demonstrace podmínek (kontrola.sh)
  5. Ukázka cyklů (cykly.sh)
  6. Zálohovací skript (zaloha.sh) a vytvořené zálohy

Shrnutí naučených příkazů

Příkaz/KonstrukceÚčel
#!/bin/bashShebang - určuje interpret
chmod +x skript.shNastavení práv pro spuštění
./skript.shSpuštění skriptu
PROMENNA=hodnotaDefinice proměnné
$PROMENNAPoužití proměnné
read -p "text" VARČtení vstupu od uživatele
if [ podminka ]; thenPodmínka
for i in seznamFor cyklus
while [ podminka ]While cyklus
nazev() { }Definice funkce
$1, $2, $3Parametry funkce/skriptu

Speciální proměnné bash

ProměnnáVýznam
$0Název skriptu
$1-$9Parametry 1-9
$#Počet parametrů
$@Všechny parametry
$?Návratový kód posledního příkazu
$$PID aktuálního skriptu
$HOMEDomovský adresář
$USERJméno uživatele
$PATHCesty k programům

Tipy pro psaní skriptů

  1. Vždy začněte shebangem: #!/bin/bash
  2. Používejte komentáře: Vysvětlete, co skript dělá
  3. Pojmenování proměnných: VELKA_PISMENA pro vlastní, malá pro lokální
  4. Testujte postupně: Nepište celý skript najednou
  5. Kontrola chyb: Používejte if [ $? -eq 0 ] pro kontrolu úspěšnosti
  6. Bezpečnost: Vždy ověřujte vstupy od uživatele
  7. Debugování: Použijte bash -x skript.sh pro sledování vykonávání

Poznámky

  • Skripty ušetří čas při opakujících se úlohách
  • Začněte s jednoduchými skripty a postupně je rozšiřujte
  • Všechny systémové příkazy lze použít ve skriptech
  • Pro pokročilé skriptování studujte regulární výrazy a awk
  • Cron umožňuje plánovat automatické spouštění skriptů
Content is user-generated and unverified.
    Bash Skriptování v Linuxu: Praktický Návod pro Začátečníky | Claude