Speciální podmínkové příkazy - 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:

Seriály

Více seriálů



Software

Speciální podmínkové příkazy

25. července 2002, 00.00 | V minulém dílu našeho seriálu o využití příkazového řádku jsme se seznámili s příkazem if. Řekli jsme si také, že podmínkou, určující kterou z "větví" then či else shell provede a kterou přeskočí, je seznam — příkaz nebo řada příkazů, jejichž návratová hodnota je určující.

Speciální podmínkové příkazy

V minulém dílu našeho seriálu o využití příkazového řádku jsme se seznámili s příkazem if. Řekli jsme si také, že podmínkou, určující kterou z "větví" then či else shell provede a kterou přeskočí, je seznam — příkaz nebo řada příkazů, jejichž návratová hodnota je určující.

V praxi ovšem poměrně často potřebujeme jednoduché podmínky typu "je v proměnné X hodnota 1"? "Byl skript volán s nějakým vstupním parametrem"? "Existuje soubor Y"?

Namísto toho, aby shelly nabízely množství jednoúčelových triviálních prográmků, jež by tyto podmínky ověřovaly, máme k dispozici speciální podmínkový příkaz, který může v příkazu if stát na místě seznamu. Tento příkaz má obecný tvar

 [[ podmínka ]]

a nabízí přebohatou sadu nejrůznějších podmínek; my se seznámíme jen s těmi nejzákladnějšími.

Porovnávání textových řetězců

Pro práci s řetězcovými hodnotami slouží jednoduché podmínky, jež připomínají programovací jazyk C: podmínka == ověří, jsou-li řetězce totožné; podmínka != ověří, zda se řetězce liší. Navíc je k dispozici jednoduchý unární operátor -z, který platí je-li jeho argument prázdný:

 80 /tmp> X=blah
 81 /tmp> Y=
 82 /tmp> if [[ $X == "blah" ]] then echo Jojo ; fi
 Jojo
 83 /tmp> if [[ $X != $Y ]] then echo Lisi se ; fi
 Lisi se
 84 /tmp> if [[ -z $X ]] then echo Nic tam neni ; fi
 85 /tmp> if [[ -z $Y ]] then echo Nic tam neni ; fi
 Nic tam neni
 86 /tmp> 

Operátor -z se nejčastěji využívá ve skriptech pro kontrolu, zda byly zadány nějaké argumenty:

 86 /tmp> cat > test
 #!/bin/zsh
 if [[ -z $1 ]] then
   echo Tento skript je treba volat s argumentem XYZ...
 else
   echo Vlastni obsah skriptu, XYZ je $1...
 fi
 87 /tmp> chmod a+x test
 88 /tmp> ./test
 Tento skript je treba volat s argumentem XYZ...
 89 /tmp> ./test HUH
 Vlastni obsah skriptu, XYZ je HUH...
 90 /tmp> 

Porovnávání numerických výrazů

Operátory -eq (ekvivalence), -ne (liší se), -lt (menší /less than/), -gt (větší /greater than/), -le (menší nebo rovno /less or equal/) a -ge (větší nebo rovno) interpretují své argumenty jako číselné výrazy:

 93 /tmp> if [[ 1 == 001 ]] then echo Jojo ; else echo Nene ; fi
 Nene
 94 /tmp> if [[ 1 -eq 001 ]] then echo Jojo ; else echo Nene ; fi
 Jojo
 95 /tmp> 

a tedy samozřejmě dovolují práci s aritmetickými výrazy (které už známe):

 96 /tmp> if [[ 2+3*4 -eq 14 ]] then echo Precedence operatoru je v poradku ; fi
 Precedence operatoru je v poradku
 97 /tmp> 

Složené výrazy

Podmínky můžeme kombinovat do složitějších výrazů pomocí stejného aparátu, který dobře znají programátoři v jazyce C: máme k dispozici unární operátor ! pro negaci a binární operátory && a || pro konjunkci a disjunkci. Samozřejmě, že libovolnou podmínku můžeme uzavřít do závorek:

 116 /tmp> cat test
 #!/bin/zsh
 if [[ $1 -lt 10 || $1 -gt 20 ]] then
   echo "Argument musi byt z intervalu <10,20>"
 else
   echo "Vlastni obsah skriptu ($1)"
 fi
 117 /tmp> ./test  
 Argument musi byt z intervalu <10,20>
 118 /tmp> ./test 5
 Argument musi byt z intervalu <10,20>
 119 /tmp> ./test 21
 Argument musi byt z intervalu <10,20>
 120 /tmp> ./test 17
 Vlastni obsah skriptu (17)
 121 /tmp> 

Příště...

...si ukážeme speciální podmínky pro práci se soubory.

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

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

Nejčtenější články
Nejlépe hodnocené články
Apple kurzy

 

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

Uživatelské jméno:

Heslo: