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:
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):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová