5 příkladů skriptů Bash, které vám pomohou naučit se programování v Linuxu

Bash skriptování představuje populární a snadno dostupnou metodu programování pro počítače s operačním systémem Linux. Tyto jednoduché skriptové příklady vám umožní porozumět celému procesu a seznámí vás se základními principy Bash programování.

1. Zobrazení „Hello World“ v Bash

Příklad „Hello World“ je výborný start pro učení se jakéhokoliv programovacího jazyka a Bash není výjimkou.

Níže je uveden postup, jak zobrazit „Hello World“ s využitím Bash:

  • Otevřete textový editor a začněte editovat nový soubor, do kterého vložíte následující řádky kódu.
  • První řádek vašeho Bash skriptu by měl vždy vypadat takto:
     #!/bin/bash 

    Shebang (#!/bin/bash) je klíčový příkaz, protože shell ho využívá k určení způsobu spuštění skriptu. V tomto případě používá interpret Bash.

  • Každý řádek začínající znakem # slouží jako komentář. Řádek shebang je speciálním případem, ale můžete používat vlastní komentáře pro popis kódu. Přidejte komentář na řádek 2, například:
     # Zobrazí text Hello World 
  • Pro zobrazení na standardní výstup použijte příkaz echo, následovaný textem, který chcete zobrazit. Na řádek 3 přidejte následující:
     echo "Hello World" 
  • Uložte skript, nejlépe s příponou .sh, například hello_world.sh. Přípona není povinná, ale je to praktická konvence.
  • Pro spuštění skriptu je potřeba nastavit soubor jako spustitelný. Použijte příkaz chmod („change mode“) spolu s argumentem +x („executable“) a názvem vašeho skriptu:
     chmod +x hello_world.sh 
  • K spuštění skriptu z jeho adresáře použijte následující příkaz:
     ./hello_world.sh 
  • Po spuštění skriptu se v terminálu zobrazí text „Hello World“:
  • 2. Vytvoření adresáře na základě uživatelského vstupu

    Ze skriptů můžete spouštět jakýkoliv program, který byste běžně používali v příkazové řádce. Například můžete vytvořit nový adresář pomocí příkazu mkdir.

  • Začněte s řádkem shebang, jak již bylo uvedeno:
     #!/bin/bash 
  • Vyzvěte uživatele k zadání názvu adresáře pomocí příkazu echo:
     echo "Zadejte název nového adresáře:" 
  • K načtení vstupu od uživatele použijte příkaz read. Jeho argument určuje proměnnou, do které shell uloží vstup:
     read newdir 
  • Pokud potřebujete použít hodnotu uloženou v proměnné, vložte před její název znak dolaru ($). Obsah vstupní proměnné pak můžete předat jako argument příkazu mkdir pro vytvoření nového adresáře:
     mkdir $newdir 
  • Po spuštění skriptu budete vyzváni k zadání názvu. Zadejte platný název adresáře a skript jej vytvoří v aktuálním adresáři:
  • 3. Vytvoření adresáře pomocí argumentů příkazové řádky

    Alternativně k interaktivnímu zadávání dat podporuje většina Linuxových příkazů argumenty. Argument lze zadat při spuštění programu, aby se ovlivnilo jeho chování.

    Ve skriptu můžete použít $1 pro odkaz na speciální proměnnou, která obsahuje hodnotu prvního argumentu. $2 odkazuje na druhý argument a tak dále.

  • Vytvořte adresář pomocí příkazu mkdir z předchozího příkladu, ale tentokrát s využitím proměnné $1:
     #!/bin/bash
    mkdir $1
  • Spusťte skript, přičemž tentokrát zadejte název nového adresáře jako argument:
     ./arg_dir.sh Test 
  • Možná vás zajímá, co se stane, když skript spustíte bez zadání argumentu. Vyzkoušejte to a sami uvidíte; měli byste obdržet chybovou zprávu, která začíná „usage: mkdir“:

    Bez argumentů příkazové řádky bude hodnota $1 prázdná. Pokud skript volá mkdir bez argumentu, příkaz mkdir vrátí tuto chybu. Pro prevenci této chyby můžete sami ověřit stav a zobrazit uživatelsky přívětivější chybovou zprávu:

  • Jak je zvykem, začněte řádkem shebang:
     #!/bin/bash 
  • Před voláním mkdir ověřte, zda není první argument prázdný. Můžete to provést pomocí příkazu if, který spustí kód na základě splnění podmínky:
     if ["$1" = ""]; then 
  • Pokud je první argument prázdný, zobrazte chybu a ukončete skript:
         echo "Prosím, zadejte název nového adresáře jako první argument"
        exit
  • Klíčové slovo „fi“ (obráceně „if“) signalizuje konec příkazu if v Bash:
     fi 
  • Váš skript může nyní pokračovat jako dříve a zpracovat případ, kdy je argument zadán:
     mkdir $1 
  • Pokud spustíte tuto novou verzi skriptu a zapomenete zadat argument, zobrazí se zpráva:

    4. Odstranění souboru pomocí funkce Bash

    Pokud zjistíte, že opakujete stejný kód, zvažte zabalení tohoto kódu do funkce. Funkci pak můžete volat, kdykoliv bude potřeba.

    Níže je uveden příklad funkce, která smaže zadaný soubor.

  • Začněte řádkem shebang:
     #!/bin/bash 
  • Definujte funkci zadáním jejího názvu, následovaného prázdnými závorkami a příkazy uvnitř složených závorek:
     del_file() {
        echo "mazání $1"
        rm $1
    }

    Poté můžete funkci zavolat a předat jí název souboru, který chcete smazat:

     del_file test.txt 

  • Po zavolání funkce se speciální proměnné $? přiřadí stav ukončení posledního spuštěného příkazu. Stav ukončení se hodí pro kontrolu chyb. V tomto příkladu lze testovat, zda příkaz rm proběhl úspěšně:

     if [ $? -ne 0 ]; then
        echo "Omlouvám se, soubor se nepodařilo smazat"
    fi

    5. Vytvoření základní kalkulačky pro aritmetické výpočty

    Tento poslední příklad zobrazuje velmi základní kalkulačku. Po jejím spuštění zadáte dvě čísla a zvolíte aritmetickou operaci, která se s nimi provede.

    Níže je kód pro soubor calc.sh:

     #!/bin/bash


    echo "Zadejte první číslo: "
    read a

    echo "Zadejte druhé číslo: "
    read b


    echo "Zvolte aritmetickou operaci:"
    echo "1. Sčítání"
    echo "2. Odčítání"
    echo "3. Násobení"
    echo "4. Dělení"
    read choice


    case $choice in
      1)
     result=`echo $a + $b | bc`
      ;;

      2)
     result=`echo $a - $b | bc`
     ;;

      3)
     result=`echo $a \* $b | bc`
      ;;

      4)
     result=`echo "scale=2; $a / $b" | bc`
      ;;
    esac

    echo "Výsledek: $result"

    Všimněte si použití case … esac, což je Bash ekvivalent příkazu switch z jiných jazyků. Umožňuje otestovat hodnotu (v tomto případě proměnnou volby) proti několika pevným hodnotám a spustit příslušný kód.

    Tento skript používá pro výpočet každý zadaný příkaz bc.