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.
Uživatelské jméno: kali
Heslo: kali
Jste přihlášeni jako standardní uživatel s právem sudo.
Vytvoříte jednoduchý bash skript a naučíte se ho spustit.
Vytvoření adresáře pro skripty:
mkdir ~/skripty
cd ~/skriptyVytvoření prvního skriptu:
nano pozdrav.shObsah skriptu (napište do editoru nano):
#!/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ářiNastavení práv pro spuštění:
chmod +x pozdrav.shCo se děje:
chmod +x = přidá právo execute (spouštění)Spuštění skriptu:
./pozdrav.shCo se děje:
./ = spusť soubor z aktuálního adresářeNaučíte se ukládat a používat proměnné ve skriptech.
Vytvoření skriptu s proměnnými:
nano promenne.shObsah skriptu:
#!/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í:
chmod +x promenne.sh
./promenne.shCo se děje:
=$NAZEV$(( )) = aritmetická operace$(příkaz) = vloží výstup příkazuVytvoříte interaktivní skript, který požaduje vstup od uživatele.
Vytvoření interaktivního skriptu:
nano dotaznik.shObsah skriptu:
#!/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í:
chmod +x dotaznik.sh
./dotaznik.shCo se děje:
read -p "text" PROMENNA = zobraz text a čti vstup do proměnné>> = připoj na konec souboru (nemazej původní obsah)Zobrazení uložených odpovědí:
cat odpovedi.csvNaučíte se používat if-else podmínky pro rozhodování ve skriptech.
Vytvoření skriptu s podmínkami:
nano kontrola.shObsah skriptu:
#!/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"
fiUložení a spuštění:
chmod +x kontrola.sh
./kontrola.shOperá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ýNaučíte se používat cykly pro opakování operací.
Vytvoření skriptu s cykly:
nano cykly.shObsah skriptu:
#!/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"
doneUložení a spuštění:
chmod +x cykly.sh
./cykly.shCo se děje:
for promenna in seznam = projdi všechny položky v seznamu*.sh = všechny soubory končící na .shwhile [ podminka ] = opakuj, dokud platí podmínkasleep 1 = pozastav na 1 sekunduVytvoříte skript s vlastními funkcemi a naučíte se předávat parametry.
Vytvoření skriptu s funkcemi:
nano funkce.shObsah skriptu:
#!/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:
chmod +x funkce.sh
./funkce.sh parametr1 parametr2 parametr3Co se děje:
nazev() { příkazy }$1, $2, $3... = parametry funkce nebo skriptu$# = počet parametrů$@ = všechny parametryreturn = vrácení návratové hodnoty (0 = úspěch, jinak chyba)Vytvoříte komplexnější skript pro zálohování adresáře.
Vytvoření zálohovacího skriptu:
nano zaloha.shObsah skriptu:
#!/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í:
chmod +x zaloha.sh
./zaloha.shCo se děje:
PŘIHLASTE SE O KONTROLU K UČITELCE
Připravte si následující k prezentaci:
| Příkaz/Konstrukce | Účel |
|---|---|
#!/bin/bash | Shebang - určuje interpret |
chmod +x skript.sh | Nastavení práv pro spuštění |
./skript.sh | Spuštění skriptu |
PROMENNA=hodnota | Definice proměnné |
$PROMENNA | Použití proměnné |
read -p "text" VAR | Čtení vstupu od uživatele |
if [ podminka ]; then | Podmínka |
for i in seznam | For cyklus |
while [ podminka ] | While cyklus |
nazev() { } | Definice funkce |
$1, $2, $3 | Parametry funkce/skriptu |
| Proměnná | Význam |
|---|---|
$0 | Název skriptu |
$1-$9 | Parametry 1-9 |
$# | Počet parametrů |
$@ | Všechny parametry |
$? | Návratový kód posledního příkazu |
$$ | PID aktuálního skriptu |
$HOME | Domovský adresář |
$USER | Jméno uživatele |
$PATH | Cesty k programům |
#!/bin/bashif [ $? -eq 0 ] pro kontrolu úspěšnostibash -x skript.sh pro sledování vykonáváníawk