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í
×
    včera 21:00 | IT novinky

    Zemřel průkopník videoherní hudby Bobby Prince (Wikipedie). Složil hudbu pro hry Wolfenstein 3D, Doom, Doom II, Duke Nukem II a Duke Nukem 3D.

    Ladislav Hagara | Komentářů: 3
    včera 15:55 | IT novinky

    Počítačová hra Operace Flashpoint (Arma: Cold War Assault) od společnosti Bohemia Interactive slaví 25 let. Při této příležitosti bylo publikováno bezplatné hratelné Arma: Cold War Assault Remastered Demo a na GitHubu byly zveřejněny zdrojové kódy.

    Ladislav Hagara | Komentářů: 0
    včera 12:22 | IT novinky

    Na trh v České republice přichází HP EliteBoard G1a. Jde o plnohodnotný AI počítač integrovaný přímo do těla klávesnice, tedy zařízení, které na první pohled vypadá jako minimalistická klávesnice, ale ve skutečnosti nahrazuje klasickou počítačovou jednotku.

    Ladislav Hagara | Komentářů: 12
    včera 10:55 | Nová verze

    V lednu bylo oznámeno, že desktopové prostředí Xfce bude mít vlastní kompozitor pro Wayland s názvem xfwl4. O víkendu byla vydána první preview verze.

    Ladislav Hagara | Komentářů: 0
    22.6. 23:44 | Nová verze

    Minulý týden byl oficiálně vydán Android 17. Detaily na blogu a stránkách věnovaných vývojářům.

    Ladislav Hagara | Komentářů: 5
    22.6. 20:00 | IT novinky

    Dnes jde do prodeje zařízení Steam Machine. Steam Machine 512 GB za 1 039 EUR a Steam Machine 2 TB za 1 359 EUR. Do čtvrtka 25. června do 19:00 se lze zapsat na seznamy. Ty budou jednorázově náhodně slosovány, čímž bude určeno pořadí rezervací a čekacích listin.

    Ladislav Hagara | Komentářů: 16
    22.6. 14:44 | Nová verze

    Vývojáři OpenMW (Wikipedie) oznámili vydání verze 0.51.0 této svobodné implementace enginu pro hru The Elder Scrolls III: Morrowind. Přehled novinek v oznámení o vydání a také na YouTube a PeerTube.

    Ladislav Hagara | Komentářů: 0
    22.6. 13:33 | Nová verze

    Byla vydána nová verze 2026.3.0 "Carousels & Killer Whales" svobodného softwaru ScummVM (Wikipedie) umožňujícího bezproblémový běh mnoha klasických adventur na zařízeních, pro které nebyly nikdy určeny. Přehled novinek v poznámkách k vydání a na GitHubu.

    Ladislav Hagara | Komentářů: 1
    22.6. 12:22 | IT novinky

    Tento týden (24. a 27. června) vyprší platnost Microsoft certifikátu v UEFI vydaných v roce 2011. Nové certifikáty byly vydány v roce 2023. Kdo na počítačích, i virtuálních, používá zabezpečené spouštění (Secure Boot), měl by si ověřit, že má certifikáty aktualizovány, viz např. články na Red Hat nebo Fedora. Pro stávající systémy se nic nemění. Nadále se budou normálně spouštět. Zavaděče podepsané pouze klíčem z 2023 se ale na počítačích s pouze certifikátem 2011 nespustí. Ve Fedoře je zavaděč shim ve verzi 16.1-6 podepsán klíči 2011 i 2023.

    Ladislav Hagara | Komentářů: 7
    21.6. 19:55 | Zajímavý software

    Uživatelé mobilních telefonů s Linuxem si nyní mohou nainstalovat aplikaci Mobilní Datovka. Díky tomu je přístup k datovým schránkám dostupný i na zařízeních s mobilními linuxovými distribucemi, jako jsou například Mobian, NixOS Mobile, pmOS atd. Aplikace je dostupná na Flathubu.

    David Heidelberg | Komentářů: 3
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (16%)
     (31%)
     (3%)
     (6%)
     (2%)
     (16%)
     (26%)
    Celkem 1972 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    BASH - VI

    28. 11. 2003 | Jan Fuchs | Návody | 115968×

    V posledním dílu seriálu si ukážeme, jak odchytávat signály, ladit skripty a nakonec několik praktických příkladů.

    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

    Odchytávání signálů

    Signály zaslané skriptu můžeme odchytávat pomocí příkazu trap.

    • trap příkaz signál - jestliže jako příkaz uvedeme znak "-", nastaví se pro signál původní akce a když '', neprovede se nic (trap -l vypíše signály, které lze odchytnout).

    Vyzkoušejte skript trap.sh.

    #!/bin/bash
    
    konec() {
      echo -n "Uklízím"
    
      i=0
      while [ "$i" -le 10 ]; do
        i=$((i + 1))
        echo -n "."
        sleep 0,1
      done
    
      echo
      echo "Konec"
    }
    
    trap '' INT
    echo "Ctrl+C neudělá nic"
    sleep 3
    
    trap - INT
    echo "Ctrl+C ukončí skript"
    sleep 3
    
    trap 'konec; exit 0' INT
    echo "Ctrl+C spustí funkci konec a ukončí skript"
    sleep 3
    
    konec
    
    echo "Skript proběhl až do konce"
    
    exit 0

    Ladění skriptů

    Následující módy shellu nám mohou usnadnit ladění.

    • verbose - před vykonáním příkaz vypíše
    • xtrace - jako předchozí, ale napřed provede expanzi; $PS4 na začátku řádku určuje stupeň expanze
    • nounset - je-li použita nedefinovaná proměnná, ukončí běh skriptu a vypíše chybovou hlášku
    #!/bin/bash
    
    set -o verbose
    echo $PWD
    
    set -o xtrace
    
    echo $PWD
    
    echo $(pwd)
    
    set +o verbose
    set +o xtrace
    
    set +o nounset
    echo $nedefinovana_promena
    
    set -o nounset
    echo $nedefinovana_promena
    
    echo "Tento řádek se již nevypíše"
    
    exit 0

    Nyní si skript ladeni.sh spustíme a podíváme se na jeho výpis.

    $ ./ladeni.sh
    echo $PWD
    /root/fuky/clanky/bash
    
    set -o xtrace
    
    echo $PWD
    + echo /root/fuky/clanky/bash
    /root/fuky/clanky/bash
    
    echo $(pwd)
    pwd
    ++ pwd
    + echo /root/fuky/clanky/bash
    /root/fuky/clanky/bash
    
    set +o verbose
    + set +o verbose
    + set +o xtrace
    
    ./ladeni.sh: nedefinovana_promena: unbound variable

    Praktické příklady

    Úkol 1

    Máme libovolnou adresářovou strukturu a v ní jsou uložené soubory *.wav, *.ogg a *.mp3.

    • *.wav chceme převést do *.ogg a uložit do podadresáře ogg
    • *.ogg chceme nahradit *.wav
    • *.mp3 chceme nahradit *.wav

    Vytvoříme si skript oggwavmp3.sh.

    #!/bin/bash
    
    case "$1" in
      *.wav )
        #cesta="${1%/*}/"
        cesta=$(echo $1 | sed 
                's/^\(.\+\/\)\([^/]\+wav\)$/\1/')
    
        if [ -d "${cesta}ogg" ]; then
          :
        else
          mkdir "${cesta}ogg"
        fi
    
        #soubor="${1%.*}.ogg"
        #soubor="${soubor##*/}"
        soubor=$(echo $1 | sed 
                 's/^\(.\+\/\)\([^/]\+\)\.wav$/\2.ogg/')
    	     
        oggenc "$1" -Q -b 192 -o "${cesta}ogg/$soubor"
        ;;
    
      *.ogg )
        #soubor="${1%.*}.wav"
        soubor=$(echo $1 | 
                 sed 's/\(.\+\)\.\(ogg\)$/\1.wav/')
    
        if [ "$soubor" ]; then
          sox "$1" "$soubor"
          rm "$1"
        fi
    
        ;;
    
      *.mp3 )
        #soubor="${1%.*}.wav"
        soubor=$(echo $1 | sed 
                 's/\(.\+\)\.\(mp3\)$/\1.wav/')
    
        if [ "$soubor" ]; then
          mpg123 "$1" -q -w "$soubor"
          rm "$1"
        fi
    
        ;;
    
      * )
        ;;
    esac
    
    exit 0

    Do souboru ~/.bashrc si přidáme alias a po dalším spuštění shellu můžeme začít využívat náš nový příkaz.

    alias oggwavmp3='find -type f | xargs -i ~/bash/oggwavmp3.sh {}'

    Úkol 2

    Obesenec

    Na závěr si zkuste udělat hru Oběšenec. Nastavení hry se provádí pomocí konfiguračního souboru. Lze vybrat, zda se bude rozlišovat diakritika či velikost písmen. Slova či věty jsou uloženy v souborech podle složitosti a jedna z možností nastavení je právě výběr jen některých souborů se slovy (větami). A nakonec je zde i možnost časového omezení při zadávání znaku (příkazu) - v případě, že čas vyprší, bude hráč ihned oběšen. Samozřejmě, že vám dám k dispozici i mé řešení obesenec-1.1.tgz, ale podívejte se na něj až problém sami vyřešíte nebo budete-li opravdu v úzkých.

    Literatura

    • Linux začínáme programovat (Richard Stones, Neil Matthew)
    • Linux příručka českého uživatele (Vilém Vychodil)
    • Linux v kostce (Ellen Siever a další) [recenze]
    • Učíme se RedHat Linux (Bill McCarty)

    Závěr

    A to je z našeho seriálu opravdu vše :-D. Máte poslední možnost zeptat se na věci, které se do našeho seriálu nevešly, nebo se na ně zapomnělo. Děkuji všem, kteří seriál průběžně komentují.

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

    Týden na ScienceMag.cz: Centaur je umělá inteligence, která myslí (má myslet) jako my
    Týden na ITBiz: Chování elektronů v grafenu se podařilo napodobit i ve 3D
    Týden na ITBiz: Polovina internetového provozu připadá stále na 6 společností MAMAAN

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

      všechny statistiky »

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

    BASH - I (první díl)
    <—« 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 - IV (Funkce a příkazy)
    BASH - V (Dokumenty here, regulární výrazy)

    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ář

    30.11.2003 08:57 Martin Swiech
    Rozbalit Rozbalit vše Regulerni vyrazt
    Zdravim, diky za skvely clanek. Zajimalo by me, zda by sly nejakym zpusobem vyresit lepe ty regulerni vyrazy v uloze 1. Ty, co jsou popsany v reseni nejsou pravda nikterak dokonale. Vubec se nechytaji, kdyz nekdo bude chtit prevedet soubory bez zapisu cesty - v aktualnim adresari (tj. napr. prikazem "oggwavmp3.sh *.wav") nebo (i kdyz je to prasarna, ale i s tim by se melo pocitat) soubory v korenovem adresari (tj. napr. prikazem "oggwavmp3.sh /1.wav"). Zkousel jsem ty vyrazy trosicku menit, ale vzdy to melo nejakou vadu, ktera zpusobovala nedokonalost pri zpracovavani zminovanych uzivatelskych vstupu. Omlouvam se. Nejspise to sem vubec nepatri, protoze tohle neni serial o regulernich vyrazech, ale presto si dovolim polozit dotaz, zda jdou vznikle situace resit pomoci REGEXP nebo by se muselo pridat par radku skriptu, ktere by kontrolovaly uzivatelske vstupy?
    1.12.2003 10:15 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Regulerni vyrazt
    Z toho si nic nedělejte. Autor článku zjevně nezná příkazy basename a dirname. Jo a jen tak mimochodem, nejsou to regulerni, ale regulárni vyrazy.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    Fuky avatar 1.12.2003 23:00 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše RE: Regulerni vyrazt
    Díky ;-)) > Vubec se nechytaji, kdyz nekdo bude chtit prevedet soubory bez zapisu cesty - v aktualnim adresari (tj. napr. prikazem "oggwavmp3.sh *.wav") nebo (i kdyz je to prasarna, ale i s tim by se melo pocitat) soubory v korenovem adresari (tj. napr. prikazem "oggwavmp3.sh /1.wav") POZOR asi jste si nevšiml aliasu, ten skript je dělaný pro něj: alias oggwavmp3='find -type f | xargs -i ~/bash/oggwavmp3.sh {}' Vlezu si do adresáře obsahující soubory, které chci převést a zadám pouze $ oggwavmp3 , vytvoření argumentů nechám na příkazu find ;-)) > basename, dirname Díky za připomínku, existuje mnoho řešení a já zrovna zvolil to složitější, člověk se stále učí a nikdo neví vševědoucí :-D
    2.12.2003 08:59 Martin Swiech
    Rozbalit Rozbalit vše RE: Regulerni vyrazt
    Diky za upozorneni. To je tak, kdyz nekdo cte nepozorne. Omlouvam se. :-)
    Matyáš Dvořák avatar 12.12.2006 17:43 Matyáš Dvořák | skóre: 13
    Rozbalit Rozbalit vše Re: BASH - VI
    proc je ve skriptu trap.sh sleep 0,1 nemelo by tam by sleep 1?

    Takhle to chybuje:
    Uklízím.sleep: invalid time interval `0,1'
    Více informací získáte příkazem `sleep --help'.
    .sleep: invalid time interval `0,1'
    Více informací získáte příkazem `sleep --help'.
    .sleep: invalid time interval `0,1'
    
    atd.
    Fuky avatar 12.12.2006 19:34 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: BASH - VI

    Díky za upozornění, nějak se mi tam vloudil překlep, místo čárky tam má být tečka sleep 0.1 ;-)

    19.3.2011 13:17 conf
    Rozbalit Rozbalit vše Re: BASH - VI
    tak tak koukam na toho obesence a nejak mi to nejede :D musim to instalovat nb staci kdyz si upravim cestu k etc a share/obesenec a pak spustim ten skript??

    Založit nové vláknoNahoru

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