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:
Software
Shellové skripty a argumenty
2. května 2002, 00.00 | Jak víme, skripty lze připravovat pro kterýkoli program, který máme k dispozici — včetně vlastních programů a, jak si ukážeme dnes, dokonce včetně vlastních skriptů (tj. můžeme psát "meta-skripty", jež budou interpretovány naším vlastním skriptem!).
Shellové skripty a argumentyJak víme, skripty lze připravovat pro kterýkoli program, který máme k dispozici — včetně vlastních programů a, jak si ukážeme dnes, dokonce včetně vlastních skriptů (tj. můžeme psát "meta-skripty", které budou interpretovány naším vlastním skriptem!).
S jedinou výjimkou zmíněného příkladu však se od nynějška soustředíme na psaní skriptů pro shelly: jinými slovy, budeme se vlastně zabývat řadou dalších příkazů a služeb standardních shellů, vhodných pro práci se skripty.
Který shell vybrat?
Můžeme psát skripty v kterémkoli shellu, který máme k dispozici. Řada céčkových programátorů např. preferuje csh (resp. tcsh) pro jeho podobnost s jazykem C; já osobně se však přiznám, že chci-li již psát "v céčku", prostě to "céčko" použiji rovnou. Z shellů mám raději zsh, jehož služby mi připadají bohatší a příjemnější. V zsh proto také budou naše příklady.
(Připomeňme, že i pokud sami preferujete jiný shell, nic vám nebrání používat zsh skripty: stačí použít standardní komentář "#!/bin/zsh" na prvém řádku, a skript se provede korektně i třeba z ksh nebo bash. Stejně dobře to samozřejmě jde i naopak: můžeme třeba používat zsh, a díky komentáři "#!/bin/csh" psát "céčkové" skripty.)
Existuje snad jediný případ, kdy je vhodné uvažovat o tradičním shellu sh: chceme-li, aby naše skripty pracovaly korektně na (téměř) libovolném unixovém stroji, je vhodné použít sh: ten je k dispozici opravdu všude, zatímco pro ostatní, bohatší shelly to platit nemusí. Pokud ale, — jak předpokládám, — budete psát shelly pro Mac OS X, můžete si vybrat kterýkoli shell, který vám nejlépe vyhovuje.
Argumenty příkazového řádku
Jak jsme si slíbili minule, začneme zpracováním argumentů příkazového řádku; to nám umožní napsat skript, jehož funkce bude ekvivalentní céčkovému programu z posledního příkladu v minulém dílu.
Pro odkazy na všemožné parametry a proměnné shellu (z nichž si samozřejmě řadu ukážeme v příštích dílech) slouží znak '$' — už jej ostatně známe z osmého dílu, kde jsme jej používali pro výpis proměnné PATH:
echo $PATH
Pro přístup k argumentům příkazového řádku slouží jednoduché pravidlo: uvedeme-li za znakem '$' číslo N, půjde vždy o odkaz na Ntý argument. Kromě toho můžeme použít také hvězdičku, jež reprezentuje všechny argumenty, a hash ("#"), který odpovídá jejich počtu.
Abychom mohli vypsat každý argument samostatně, potřebujeme ještě příkaz for; se všemi jeho možnostmi se podrobněji seznámíme později, dnes si jej ukážeme jen v základní, nejjednodušší podobě.
Celý skript by mohl vypadat takto:
#!/bin/zsh
# opsat vsechny argumenty na std.vystup
echo $0
for ii in $*; echo $ii
"Argument" na pozici nula (který reprezentuje "jméno právě běžícího programu") musíme vypsat zvlášť, protože "$*" vypisuje argumenty až od "jedničky" — to je většinou také to, co opravdu chceme; náš minulý příklad byl trochu umělý.
Jestliže tento skript uložíme do souboru qqq namísto céčkového programu z minulého dílu, můžeme použít beze změny testovací skript test:
206 /tmp> cat test
#!/tmp/qqq uz je to snad jasne
# nic dalsiho sem nema smysl psat
207 /tmp> ./test
/tmp/qqq
uz je to snad jasne
./test
208 /tmp>
Jediný rozdíl proti "céčkové" variantě je, že náš skript nevypisuje pořadová čísla argumentů; to doplníme příště, kdy se trochu blíž podíváme na proměnné.
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á