abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 08:11 | Nová verze

    Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Nová verze

    Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 15:55 | Pozvánky

    Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových

    … více »
    Zdenek H. | Komentářů: 2
    včera 15:44 | IT novinky Ladislav Hagara | Komentářů: 2
    včera 13:55 | Komunita

    Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.

    Ladislav Hagara | Komentářů: 10
    28.4. 23:33 | Nová verze

    Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    28.4. 17:22 | Zajímavý projekt

    TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.

    Ladislav Hagara | Komentářů: 0
    28.4. 17:00 | Nová verze

    Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.

    Ladislav Hagara | Komentářů: 5
    27.4. 21:33 | Nová verze Ladislav Hagara | Komentářů: 0
    Jaký filesystém primárně používáte?
     (58%)
     (1%)
     (9%)
     (21%)
     (4%)
     (1%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 486 hlasů
     Komentářů: 18, poslední 17.4. 12:41
    Rozcestník

    BASH - IV

    14. 11. 2003 | Jan Fuchs | Návody | 64171×

    V dnešní části seriálu si ukážeme, jak získat hodnoty argumentů předaných skriptu a také použití funkcí a příkazů.

    Obsah jednotlivých dílů

    1. Úvod, editace příkazové řádky
    2. Základní příkazy, roury a přesměrování
    3. Proměnné, podmínky a cykly
    4. Funkce a příkazy
    5. Dokumenty here, regulární výrazy
    6. Ladění skriptů, odchytávání signálů a příklady

    Informace o názvu skriptu, počtu předaných argumentů a argumenty samotné jsou uloženy ve speciálních proměnných.

    • $0 - název skriptu
    • $# - počet předaných argumentů
    • $IFS - seznam znaků, který je použit k oddělování slov atp., např. když shell čte vstup
    • $1$9 - první až devátý argument předaný skriptu
    • ${n} - libovolný n-tý argument předaný skriptu
    • $* - obsahuje všechny argumenty oddělené prvním znakem z $IFS
    • $@ - jako předchozí, ale k oddělení se nepoužívá první znak z $IFS

    Skript argumenty.sh nám poslouží jako ukázka.

    #!/bin/bash

    echo "Název skriptu: $0"
    echo "Počet argumentů: $#"
    echo "Všechny argumenty: $@"
    echo "První argument: $1"
    echo "Desátý argument: ${10}"

    exit 0

    Nyní skript spustíme s 10 argumenty.

    $ ./argumenty.sh jedna dva tři čtyři pět šest sedm osm devět deset
    Název skriptu: ./argumenty.sh
    Počet argumentů: 10
    Všechny argumenty: jedna dva tři čtyři pět šest sedm osm devět deset
    První argument: jedna
    Desátý argument: deset

    Funkce

    Provádění funkcí je mnohem rychlejší než provádění skriptů, protože funkce si shell udržuje trvale předzpracované v paměti. Funkce musí být definována dříve než bude použita. Příkaz export lze použít i pro funkce, ale musí být zapnutý mód allexport.

    $ set -o allexport
    $ prvni_funkce() {
    > echo "Jsem první funkce a vypisuji text"
    > }
    $ export prvni_funkce
    $ prvni_funkce
    Jsem první funkce a vypisuji text
    $ bash
    $ prvni_funkce
    Jsem první funkce a vypisuji text

    Funkcím můžeme předávat argumenty stejně jako skriptům a získáváme je stejným způsobem jako u skriptů. Příkaz return ukončí funkci a vrací její návratovou hodnotu ve formě celočíselného argumentu. Po dokončení funkce jsou poziční argumenty skriptu ($#, $@ ...) obnoveny (u starších shellů to tak být nemusí).

    $ funkce_s_argumenty() {
    > echo "Počet argumentů: $#"
    > echo "Všechny argumenty: $@"
    > echo "První argument: $1"
    > return 0
    > }
    $ funkce_s_argumenty první druhý
    Počet argumentů: 2
    Všechny argumenty: první druhý
    První argument: první

    Budeme-li chtít vrátit řetězcovou hodnotu, můžeme to udělat např. níže uvedeným způsobem.

    #!/bin/bash
    
    vrat_retezec() {
      echo "Řetězec"
    }
    
    promena=$(vrat_retezec)
    echo $promena
    
    exit 0
    

    Pomocí klíčového slova local můžeme také vytvořit lokální proměnné funkce. Jestliže bude existovat globální proměnná se stejným názvem, bude ve funkci potlačena.

    #!/bin/bash
    
    jedna="První globální proměnná"
    dva="Druhá globální proměnná"
    
    lokalni_promena() {
      local jedna="První lokální proměnná"
    
      echo $jedna
      echo $dva
    }
    
    lokalni_promena
    
    echo $jedna
    echo $dva
    
    exit 0
    

    Příkazy

    Příkazy můžeme rozdělit na zabudované a normální. Zabudované příkazy nemůžeme spustit jako externí programy, ale většinou mají své ekvivalenty ve formě externích programů. Normální příkazy jsou externí programy a jejich vykonání je pomalejší než u zabudovaných příkazů.

    • break - vyskočí z cyklu
    • : - nulový příkaz
    • continue - spustí další iteraci cyklu
    • . - provede příkaz v aktuálním shellu
    • eval - vyhodnotí zadaný výraz
    • shift - posune poziční parametry
    • read - načte uživatelský vstup, jako argument se použije název proměnné, do které se má uložit
    • stty - mění a vypisuje charakteristiky terminálové linky
    • exec - spustí nový shell nebo jiný zadaný program a nebo upraví deskriptor souboru
    • exit n - ukončení skriptu s návratovým kódem n (n = 0 - úspěšné ukončení, n = 1 až 125 - chyba, ostatní n jsou rezervovány)
    • printf - není dostupný ve starých shellech a při vytváření formátovaného výstupu byste mu měli dávat přednost před příkazem echo podle specifikace X/Open

    Na skriptu prikazy.sh si ukážeme použití některých výše uvedených příkazů.

    #!/bin/bash
    
    for i in 10 20 30 40 50; do
      if [ $i -eq 40 ]; then
        break
      elif  [ $i -eq 20 ]; then
        continue
      else
        :
      fi
      echo $i
    done
    
    a="abc"
    nazev_promene="a"
    
    promena='$'$nazev_promene
    echo $promena
    
    eval promena='$'$nazev_promene
    echo $promena
    
    while [ "$1" ]; do
      echo $1
      shift
    done
    
    exec date
    
    echo "Tato část již nebude provedena!"
    
    exit 0
    

    Nezapomeneme skript spustit s několika argumenty.

    $ ./prikazy.sh první druhý třetí
    10
    30
    $a
    abc
    první
    druhý
    třetí
    St říj 22 16:08:36 CEST 2003

    Nyní si ukážeme interaktivní skript read.sh, který požádá uživatele o zadání přihlašovacího jména a hesla. Heslo se nebude vypisovat na obrazovku.

    #!/bin/bash
    
    echo -n "Přihlašovací jméno: "
    read jmeno
    
    echo -n "Heslo: "
    
    # Vypne výpis vstupních znaků
    stty -echo
    
    read heslo
    
    # Zapne výpis vstupních
    stty echo
    echo
    
    if [ "$jmeno" == "fuky" ] && [ "$heslo" == "heslo" ]; then
      echo "Kód: Příšerně žluťoučký kůň úpěl ďábelské ódy"
    else
      echo "Nemáte oprávnění k vypsání kódu"
    fi
    
    exit 0
    

    Zadáme-li správné údaje, získáme kód.

    $ ./read.sh
    Přihlašovací jméno: fuky
    Heslo:
    Kód: Příšerně žluťoučký kůň úpěl ďábelské ódy

    Na závěr tohoto dílu si ukážeme použití konstrukce
    select proměnná in hodnota1 ... hodnotaN; do příkazy; done.

    #!/bin/bash
    
    echo "Zadejte vaše pohlaví"
    
    select pohlavi in muž žena; do
      if [ "$pohlavi" ]; then
        echo "Jste $pohlavi"
        break
      else
        echo "$REPLY je nedefinovaná odpověď"
      fi
    done
    
    exit 0
    

    Po spuštění příkazu select je uživatel vyzván, aby zadal číslo jedné z hodnot (hodnota1 ... hodnotaN v našem případě muž nebo žena). proměnná $REPLY obsahuje vždy hodnotu uživatelského vstupu. proměnná $pohlavi obsahuje hodnotu pouze v případě, že číslo odpovídá jedné z voleb. Dotaz se opakuje, dokud se neprovede v těle příkaz break.

    $ ./select.sh
    Zadejte vaše pohlaví
    1) muž
    2) žena
    #? 3
    3 je nedefinovaná odpověď
    1) muž
    2) žena
    #? 1
    Jste muž

    Nejčtenější články posledního měsíce

    Bláznivý Apríl, bláznivě nízké ceny Windows 11! Získejte jen za €20
    Týden na ScienceMag.cz: Galaxie umírají dříve
    Událo se v týdnu 14/2025

    Nejkomentovanější články posledního měsíce

    Týden na ITBiz: Halucinace balíčků při programování AI
      všechny statistiky »

    Seriál BASH (dílů: 6)

    BASH - I (první díl)
    <—« BASH - III
    »—> BASH - V
    BASH - VI (poslední díl)

    Související články

    BASH - I (Úvod, editace příkazové řádky)
    BASH - II (Základní příkazy, roury a přesměrování)
    BASH - III (Proměnné, podmínky a cykly)
    BASH - V (Dokumenty here, regulární výrazy)
    BASH - VI (Ladění skriptů, odchytávání signálů a příklady)

    Odkazy a zdroje

    BASH - GNU Project

    Další články z této rubriky

    VDR a DVB-T2, část 2.
    VDR a DVB-T2, část 1.
    Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
    MapTiler – proměňte obrázek v zoomovatelnou mapu
    Syncthing
           

    Hodnocení: 39 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.