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 01:16 | Komunita
Dnes je to přesně 10 let ode dne, kdy vyšla první verze populární distribuce Ubuntu.… více »
tuxmartin | Komentářů: 18
včera 20:50 | Zajímavý projekt

Tomáš Solař, autor české knihy Oracle Database 11g – Hotová řešení, nabízí kontrolu databáze Oracle zdarma. Jedná se o bezplatnou službu, která vám může pomoci odhalit slabé místo vaší databáze, aniž byste za to museli platit. Služba je určená všem, kdo využívají databáze Oracle, ale nikterak se o ně nestarají, přestože v nich uchovávají veškerá firemní data. Více se dočtete přímo na webu dba4refence.

Oracle_DBA | Komentářů: 30
18.10. 02:44 | Komunita
V únoru bylo rozhodnuto, že výchozím init systémem Debianu bude systemd (zprávička). Březnový návrh na hlasování o zachování možnosti volby init systému, tj. o tom, že balíček nemůže záviset na konkrétním init systému neprošel. Včera Ian Jackson návrh zopakoval a hlasovat se tentokrát bude. Lucas Nussbaum, vedoucí projektu Debian, podal alternativní návrh: podpora různých init systémů je žádoucí, ale ne povinná. Řeší se také, zda je na hlasování ta správná doba. Debian Jessie by měl být zmrazen 5. listopadu (zprávička).
Ladislav Hagara | Komentářů: 98
17.10. 11:49 | Nasazení Linuxu
Díky kombinaci Raspberry Pi, miniaturního modulárního fotoaparátu Pi a jednoduchého skriptu v Pythonu můžete snímat proměny krajiny nebo třeba východy či západy slunce.
Tadeáš Pelech | Komentářů: 16
17.10. 10:57 | Zajímavý projekt
Docker a Microsoft vydali oznámení o partnerství. Docker bude rozšířen o Docker Engine for Windows Server, služby Microsoftu budou podporovat Docker API.
Michal Vyskočil | Komentářů: 17
17.10. 01:01 | Zajímavý projekt
V dubnu byla vyhlášena soutěž The Hackaday Prize (zprávička) pro vývojáře open source hardwaru. Z přihlášených více než 800 projektů bylo vybráno 50 semifinalistů a následně 5 finalistů. Vítěz bude vyhlášen v listopadu na veletrhu electronica. Hlavní cenou soutěže je výlet do vesmíru nebo 196 418 dolarů v hotovosti.
Ladislav Hagara | Komentářů: 1
17.10. 01:00 | Komunita
Nadace Raspberry Pi v dubnu představila výpočetní modul Raspberry Pi (Raspberry Pi Compute Module) (zprávička). Tento výpočetní modul (zmenšené Raspberry Pi) lze připojit pomocí slotu SO-DIMM k vlastní desce plošných spojů nebo k oficiální IO desce (Compute Module IO Board). Včera nadace pod licencí BSD zveřejnila veškeré výkresy této oficiální IO desky.
Ladislav Hagara | Komentářů: 0
16.10. 13:07 | Nová verze
Laboratoře CZ.NIC právě vydaly první testovací verzi (0.1.0) desktopové aplikace Datovka, která v budoucnu nahradí stávající Datovku napsanou v jazyce Python. Nová Datovka je napsaná v jazyce C/C++ a používá knihovnu Qt. Aplikace používá jednotné grafické rozhraní pro Windows, Linux a OS X a bude podporovat stejnou funkcionalitu jako stávající Datovka včetně všech používaných metod autentizace. … více »
Vilem Sladek | Komentářů: 37
15.10. 23:16 | IT novinky
Google na svém oficiálním blogu představil Android 5.0 Lollipop (lízátko). Současně představil (YouTube) telefon Nexus 6, tablet Nexus 9 a přehrávač Nexus Player.
Ladislav Hagara | Komentářů: 49
15.10. 16:24 | Bezpečnostní upozornění
Byl publikován útok na nyní už zastaralý protokol SSL verze 3. Útok umožňuje downgradovat spojení na SSLv3 a extrahovat ze spojení data. Autoři popisují konkrétně získání HTTP cookie, náročnost je přibližně 256 requestů na každý byte hodnoty cookie. Útok je účinný, kdykoli obě strany podporují SSLv3 a některá z nich neimplementuje SCSV (TLS Fallback Signaling Cipher Suite Value).
Lyco | Komentářů: 10
Hlasuji z:
 (80%)
 (14%)
 (3%)
 (2%)
 (1%)
 (0%)
Celkem 4473 hlasů
 Komentářů: 50, poslední 12.10. 11:59
Rozcestník
Reklama
Autoškola testy online Levný benzín

BASH - VI

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

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

Komiks xkcd 1085: ContextBot
HW novinky: iPhone 6 Plus má velké problémy
Komiks xkcd 1036: Recenze

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

HW novinky: iPhone 6 Plus má velké problémy
Jaderné noviny – 4. 9. 2014: Systémy souborů v trvalé paměti
HW novinky: DisplayPort Alternate Mode
  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

GNU R prakticky - 2. díl
GNU R prakticky – 1. díl
Paralelizace běžných činností v konzoli pomocí GNU Parallel
Porovnávání obsahu adresářů v GUI
MUNIN, sieťový monitorovací framework
       

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: 51 | 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: 51 | 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   Powered by Hosting 90 Server hosting
© 1999-2013 Argonit s. r. o. Všechna práva vyhrazena.