Hledat
Přihlásit se
  • Věda a technika
  • Herní doupě
  • Tipy pro PC
  • IT Byznys
  • Mobily
  • Počítače
  • Počítače
  • Témata
  • Poradna
  • Diskuzní fórum
  • Video
  • Bazar
  • Blogy
  • MĚŘENÍ RYCHLOSTI
  • RSS
  • Facebook Twitter Google+ YouTube
  • Hardware
  • Software
  • Počítače
  • Notebooky
  • Služby na webu
  • Apple
  • Google
  • Microsoft
  • Seznam
  • Tiskové zprávy
Další témata
  • Týden Živě
  • Zprávy Živě
  • Testy
  • Pitvy
Všechna videa
X

Doporučit článek

Vaše jméno:

Váš e-mail:

E-mail adresáta:

Komentář:

kontrolní kód

Odeslat

Blogy Živě » Linux zblízka

Linux zblízka

 

Tahák : Programování v jazyce Bash

12. 2. 2010, uzivatel2

Tento tahák sumarizuje důležité znalosti ze skriptování v shellu Bash. Nezabývá se však základními principy tohoto skriptování a ani se nejedná o úplný výčet možností Bashe. Možná spíše hledáte základní příkazy pro práci v terminálu.

Celková charakteristika jazyka

Bash (jako programovací jazyk) je interpretovaný, neobjektový, imperativní, turingovsky kompletní jazyk s dynamickým slabým typováním proměnných určený především pro administraci a automatizaci *nix operačních systémů.  Syntaxe Bashe je dlouhodobě ustálená a jednotlivé verze shellu jsou dobře kompatibilní. Skripty obvykle většinu požadované činnosti vykonávají voláním systémových utilit (umístěné převážně v adresáři /bin) a pracují s textovými řetězci. Samotný Bash obsahuje základní funkcionalitu pro ladění skriptů, které se obvykle vytvářejí v textových editorech jako například Vim, Emacs, gEdit. Podpora syntaxe Bashe je u textových editorů obvyklá. Bash je nainstalován prakticky na každém desktopovém Linuxu a na mnoha dalších *nix systémech.

Základy

#komentar komentář
#!/bin/bash označení interpreta skriptu
odřádkování oddělovač
“retezec” řetězec znaků
‘obsah’ obsah bere jako celek
: nulový příkaz
. skript spustí skript v aktuálním shellu
eval vyhodnocení
exec spuštěný proces nahradí aktuální shell
expr zpracuje argument jako výraz
$(obsah) vyhodnocení obsahu
${promenna:-neco} parametrická expanze
exit 0 skončí s uvedenou návratovou hodnotou
return 0 ukončení funkce se zadanou návratovou hodnotou

Podrobnosti o možnostech spouštění příkazů  (např. &,“, ; ,|) najdete v Ovládání Bashe. Uvedený příklad parametrické expanze vrátí hodnotu proměnné promenna (pokud je nastavena) nebo neco (pokud promenna není nastavena). Parametrických expanzí existuje více.

Proměnné

promenna jméno proměnné
$promenna hodnota proměnné
promenna=0 inicializace proměnné
set založení proměnné
unset zrušení proměnné
export exportování
$0, $1, $2 předané parametry
$0 jméno skriptu
$# počet předaných parametrů
$*, $@ výpis jmen proměnných
$? návratová hodnota posledního příkazu
$$ identifikační číslo procesu (PID)
$PS1 běžný prompt (např. petr@workstation:~$)
$PS2 zadávací prompt (obvykle >)
$IFS oddělovač
$RANDOM náhodná hodnota

Vstup a výstup

echo výpis na standardní výstup
read promenna čtení ze vstupu
trap zachycení signálů
printf podobný funkci printf v jazyce C
set -v vhodné pro debuggování
gdialog, dialog různé funkce pro grafický výstup (záleží na distribuci)

Podrobnosti o možnostech práce se soubory (např. |, <, <2, <<) najdete opět v Ovládání Bashe. Bash nabízí několik nastavení pro debuggování. Tato nastavení se určují atributem při spouštění shellu nebo pomocí příkazu set (např. zmiňovanné set -v). Speciální debuggery (např. Bashdb) se používají jen zřídka. Příkaz exec (viz tabulka Základy) má i druhý význam související s deskriptory souborů; jde však o prakticky neznámou raritu.

Regulární výrazy

Regulární výrazy označují třídy řetězců s určitou vlastností. Například regulární výraz ^a splňují všechny řetězce začínající podřetězcem “a”. Regulární výrazy usnadňují automatickou manipulaci s řetězci a často je využívají i jiné programovací jazyky (např. PHP) nebo lepší textové editory (např. Vim).

^ začátek řetězce
$ konec řetězce
[01] 0 anebo 1
., *, ?, {n}, {n,}, {n,m} různé požadavky na počet opakování
[:upper:] předdefinované možnosti (zde velká písmena)

Vedle [:upper:] existuje velmi mnoho takto předdefinovaných speciálních množin.

Splňování výroků

test vyhodnocení výroku
[podminka] vyhodnocení výroku
(()) vyhodnocení výroku
[[]] vyhodnocení výroku z více podmínek (atomických výroků)
! negace
=, -eq, -ge, -gt různá porovnání číselných hodnot
-f soubor je soubor
-d soubor je adresář
-e soubor existuje
-r skript má právo ke čtení souboru

Volba pojmenování relací (např. -le pro neostře menší) vychází ze zkratek anglických označení relací (např. less or equal). Neuváděné aritmetické operátory se značně podobají konvencím z jiných jazyků. Testů vlastností souborů existuje velké množství.

Řídící struktury

Řídící struktury se často ukončují klíčovým slovem “pozpátku” (např. if fi, case esac).

Podmínky (klasické if, case a ternární výraz) :

if podminka
then
prikaz
else
jiny_prikaz
fi

case promenna in
vzor00 | vzor01 | vzor02 ) prikaz;;
vzor10 | vzor11 | vzor12 ) prikaz;;
vzor20 | vzor21 | vzor22 ) prikaz;;
esac

podminka ? prikaz0 : prikaz1

Cykly :

for promenna in hodnota0 hodnota1 hodnota2
do
prikaz
done

while podminka do
prikaz
done

Bash podporuje předčasné ukončení cyklu “příkazem” break;.

Funkce (definice, volání, výstup funkce) :

jmeno_funkce(){
neco
}

jmeno_funkce

(jmeno_funkce)

Štítky: Přehledy


Publikováno v rubrice Nezařazené. Reakce v diskuzi lze sledovat prostřednictvím RSS 2.0. Můžete přidat komentář, nebo se na článek odkázat ze svého webu.

« Stručná historie UNIXu
Náhrada za Firefox na slabý počítač s Linuxem »
 

Komentáře v diskuzi

1.  Martin Putniorz(89.176.157.xxx)   12. 2. 2010, 13:35

Nemělo by se psát spíš v Bashi?

2.  uzivatel2(ověřeno)   12. 2. 2010, 14:03

re 1 : V komentáři k článku Ovládání Bashe mě na to rovněž upozorňovali. Jste si jistý, že se jedná o chybu? Nechce se mi to moc přepisovat; z jiného webu vím, že lidé hledají relativně často ve vyhledávačích tvar “bashy”…

3.  kmarty(212.158.128.xxx)   12. 2. 2010, 14:24

Jestli nehledaji spis totok: http://en.wikipedia.org/wiki/Bashy

v pripade Bourne Again SHellu bych se ale priklanel ke scriptovani v Bashi :-).

4.  kmarty(212.158.128.xxx)   12. 2. 2010, 15:11

Apropo:
“-neq” ? Jak interni bashove porovnani, tak externi “[" a "test" maji pouze -gt, -ge, -eq, -le, -lt a -ne (alespon jsem o tom by do dneska presvedcen :-)).

"[0,1]” je v regexpu “0″, “,” nebo “1″ - melo byt tam byt spise “[01]” pokud ma jit o vycet znaku “0″ a “1″. Ono obecne jsou regexpy dost velka kapitola na to aby byly samostatne, ne jako soucast jineho “tahaku”.

Polozku ‘obsah’ pravdpodobne poskodil mistni redakcni system, hadam ze by tam mely byt spise zpetne apostrofy. Mozna by stalo doplnit tahak o $(obsah) + vysvetleni rozdilu mezi nimi.

5.  honza(194.228.122.xxx)   12. 2. 2010, 15:22

ta hrubka bije do očí :)

6.  uzivatel2(ověřeno)   12. 2. 2010, 16:00

re 4 : Díky za upozrnění. (-neq je špatná práce s více verzemi a ctrl+c ctrl+v, [0,1] překlep)

U ‘obsah’ jsem nemyslel zpětný (grave) apostrof. Ale situaci, kdy běžné apostrofy brání normální činnosti syntaktického parseru. Příklad:

a=0
echo “$a” ‘$a’ $a
echo `$a`

(výsledek :
0 $a 0
command not found
)

Konstrukci $(obsah) jsem zapoměl

7.  kmarty(212.158.128.xxx)   12. 2. 2010, 17:25

Aha, tak to jsem byl mimo. Mne z toho popisu nedoslo ze ma jit o retezec bez expandovani promennych.
Coz nutne nemusi jit o chybu v popisu. Dost casto mam zdroj informaci pouze v anglictine a protoze ji zase tak uplne nevladnu, tak si tomu nekdy priradim nejaky vlastni oznaceni ktery po par letech pouzivani pak beru jako uplne normalni :-).

8.  jehovista(94.113.6.xxx)   13. 2. 2010, 00:09

BashY je urcite spatne. Jednak jsem to nikdy nevidel, ale hlavne by me zajimal jiny priklad slova, kde je v sestem padu koncovka ‘y’.

9.  Aminux(213.226.245.xxx)   13. 2. 2010, 13:51

Bash bez Bashe - muž bez muže? Bashi-muži?

10.  uzivatel2(ověřeno)   13. 2. 2010, 14:06

Dobře, změnil jsem formulace a vyhnul se tvaru Bashy/Bashi.

re 8 : Mě by na druhou stranu zajímal příklad slova končícího na písmeno “h”, které při skloňování získává koncovku “i”.

11.  jehovista(94.113.6.xxx)   13. 2. 2010, 14:42

[10] Bash neni puvodni ceske slovo a ta koncovka je ekvivalentem ceskeho “š”, tedy mekke souhlasky. Napriklad anglicke slovo cache se taky nekdy v cestine pise jako “kes” a tam by asi nebylo moc pekne, ze mam data v “kesy” a pochybuju, ze by nekdo byl schopen napsat “v cachy”. Urcite by to stalo na dotaz na ustav pro jazyk cesky. Dost mozna reknou, ze je mozne psat oboji, ale me proste “bashy” trha oci.

12.  Magicmaster(81.201.57.xxx)   13. 2. 2010, 17:10

#10: Příklad zrovna vymyslet nemůžu, ale řekl bych, že se bude skloňovat podle Stroj: Bash, Bashe, Bashi, Bash, Bashi, Bashi, Bashem :)

13.  Soccer Jerseys(58.22.64.xxx)   10. 9. 2010, 08:19

z jiného webu vím, že lidé hledají relativně často ve vyhledávačích tvar “bashy”…

Přidat komentář

*
Opište prosím text z obrázku.
Anti-Spam Image


Aktuální články a bleskovky

Lenovo uvádí nové ThinkPady s čipy Ivy Bridge
Lenovo uvádí nové ThinkPady s čipy Ivy Bridge
Brýle Google Glass jsou patentované
Brýle Google Glass jsou patentované
Ifttt.com: Propojte a automatizujte svůj internet
Ifttt.com: Propojte a automatizujte svůj internet
Nejlepší programy pro práci s Wi-Fi
Nejlepší programy pro práci s Wi-Fi



Linux zblízka využívá WordPress MU a běží na Blog.zive.cz. Vytvořte si svůj vlastní blog
Sledování přes RSS: články a komentáře


  • Seznam odkazů

    • Kontakt na autora blogu
    • Moje články pro LE
    • Různé přílohy k blogu
    • Stránky autora blogu
  • Poslední příspěvky

    • Chystá se revoluce v hraní her?
    • Kontroverze okolo Křišťálové lupy
    • Deset největších open source inovací
    • Nová “daň” za software
    • Má smysl kupovat TV tuner?
    • Zvýšila se v Linuxu spotřeba?
    • Porušování GPL licence ve světě Androidu
    • Je bezplatnost Linuxu výhodou?
    • Potřebujeme nová uživatelská rozhraní?
    • Podvod s hlasováním v přímém přenosu
    • Facebook není zadarmo
    • Nápad na startup
    • Co hrají linuxáci?
    • Nová cloudová platforma OpenShift
    • Kvalitní linuxové antiviry pro desktop ve skutečnosti neexistují
  • Administrace

    • Přihlásit se

1210_Computer.png

Časopis Computer

  • Nakupujte v zahraničí
  • Test 7 čteček elektronických knih
  • Technologie: nové standardy digitálního vysílání
  • Přehled cloudových uložišť
  • Poradíme s výběrem kamery na dovolenou

Partnerská sekce pro IT profesionály:
Microsoft TechNet/MSDN


Video Živě

Bluetooth stojánky pro Android: Philips AS111, AS141 a AS351
Ifttt.com -- založení úkolu
Zprávy Živě - 12. května 2012
iPad docky Logitech AV Stand a Logitech Speaker Stand

další videa »






Mladá Fronta a.s. Mladá Fronta a.s.
Tiráž | Autoři | Připomínky | Odběr novinek | RSS | Textová verze
Copyright 2000–2012 Mladá fronta a.s. | Inzerce: onlinesales@mf.cz | Kontakt na redakci | Návštěvnost měří NetMonitor