Pro skript může být shell cokoli! - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se narodil známý fotograf František Drtikol?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Informace

Pro skript může být shell cokoli!

25. dubna 2002, 00.00 | Jak jsme si slíbili minule, dnes se podíváme podrobněji na to, jak psát skripty pro libovolné programy — vedle shellů to nejčastěji bývá sed nebo awk, které už oba známe.

Jak jsme si slíbili minule, dnes se podíváme podrobněji na to, jak psát skripty pro libovolné programy — vedle shellů to nejčastěji bývá sed nebo awk, které už oba známe.

sedový skript

Vzpomínáte si na poměrně komplikovaný příklad využití dávkového editoru sed ze čtyřiadvacátého dílu? Tehdy jsem jej zobrazil takto:

 # the sed patterns for converting ASCII to HTML
 ### & and <>, mdash
 ...
 \|^//3\(.*\)$|s||<B>\1</B>|
 ### figures
 \|^//obr:\(.*\)$|s||<IMG SRC="images/\1">|

ve skutečnosti však má navíc ještě jeden řádek, který jsem tehdy vynechal: jak už pozorní čtenáři jistě tuší, jde o speciální "skriptový" komentář !, umístěný do prvého řádku, který (spolu s přidělením přístupového práva 'x') zajistí, že skript mohu volat jako samostatný spustitelný program:

 #!/usr/bin/sed -f

Jednoduchý skript pro awk

Obdobným způsobem bychom mohli připravit skript, který automaticky spustí program awk a předá mu "sám sebe" ke zpracování. Ukažme si pro změnu kompletní příklad takového jednoduchého skriptu, který vybere jen liché řádky ze standardního vstupu:

 111 /tmp> cat > tst             
 1
 2
 3
 4
 5
 6
 112 /tmp> cat > jenliche.awk    
 #!/usr/bin/awk -f
 NR%2
 113 /tmp> chmod a+x jenliche.awk
 114 /tmp> ./jenliche.awk < tst  
 1
 3
 5
 115 /tmp> 

Funguje to opravdu úplně s čímkoli

Ono je to vlastně jednoduché: unixový systém prostě při interpretaci skriptu (který obsahuje úvodní komentář !) najde zadaný program, a předá mu zbývající text z komentáře ! (je-li jaký) jako argument; nakonec pak připojí jméno volaného skriptu.

Ukažme si, co se vlastně přesně stane, na příkladu vlastního programu napsaného v C, který jen opíše všechny své argumenty na standardní výstup (čtenáře, kteří neznají C, prosím jen o maličko trpělivosti: hned v příštím dílu se naučí napsat přesně stejný program... přímo v shellových skriptech!).

 124 /tmp> cat > q.c           
 #include <stdio.h>
 int main(int ac,char **av) {
   int i;
   for (i=0;i<ac;i++) printf("%d: %s\n",i,av[i]);
   return 0;
 }
 125 /tmp> cc q.c -o qqq       
 126 /tmp> cat > test          
 #!/tmp/qqq uz je to snad jasne
 # nic dalsiho sem nema smysl psat
 127 /tmp> chmod a+x test      
 128 /tmp> ./test              
 0: qqq
 1: uz je to snad jasne
 2: ./test
 129 /tmp> 

A to je pro dnešek vše...

Mimochodem, příště už budeme jako příklad ukazovat přímo text skriptu: je zřejmé, že jej můžeme napsat jakkoli (třeba v TextEditu), a že (a jak) je třeba nastavit jeho přístupová práva. Od této chvíle to budeme považovat za samozřejmé, takže např. skript z minulého příkladu bychom zobrazili prostě jako

 #!/tmp/qqq uz je to snad jasne
 # nic dalsiho sem nema smysl psat

Příště — abychom splnili slib z minulého odstavce těm, kdo neznají C — se vrátíme ke skriptům interpretovaným shelly, a podíváme na to, jak v nich můžeme pracovat s argumenty příkazového řádku.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: