Ebben az oktatóanyagban Bash eset alapú feltételes utasításokat tekintünk meg. Gyakorlati példákat tekintünk át, és megvitatjuk, hogy egy Bash-eset .. az esac-állítást mikor lehet a legjobban alkalmazni egy hagyományosabb helyett if .. then .. fi
nyilatkozat.
Bash-ügy .. esac nyilatkozatok Bash-ban
Természetesen a Bash shellből érhető el, a feltételes utasítások, a case
és esac
idiómák (a szóhasználat szó vagy szavak csoportja, vagy kulcsszó, bevett használati mintákkal; a számítógépes nyelv kifejezésének egyik formája), komplex feltételes eseteket külön-külön fel lehet építeni (ezért a kifejezés case
) keresés és végrehajtás-eseti utasítás.
Az esetalapú állítás keresési részét néha a-nak hívják válassza, ami a kifejezéshez vezet select / case statement (vagy fordítva), amelyet más kódoló nyelvekben, például a VBA-ban használnak, azonos típusú programozási paradigmára utalnak. Még egy nyelvkészlet (például C #, C ++, Java és JavaScript) ezt hívja a-nak kapcsoló vagy kapcsolószekrény nyilatkozat. Mindezeknek hasonló jelentése és művelete van.
Építsük meg az elsőnket case .. esac
utasítás egyszerű szkript használatával.
Egy egyszerű eset .. esac forgatókönyv
Meghatározzuk a teszt szkriptünket test.sh
alábbiak szerint:
#!/bin/bash case "${1}" in 1) echo "Option was 1!";; 2) echo "Option was 2!";; *) echo "Option was something else: '${1}'";; esac
Ezután futtathatóvá tesszük a szkriptünket chmod +x test.sh
majd végrehajtjuk magát a szkriptet, minden alkalommal más-más opciót adunk meg bemenetként.
Esetünk nyitási záradékában meghatározzuk, hogy az első beviteli opciót szeretnénk használni ($1
) mint értékelendő változó. A mi case .. esac
utasítás ellenőrzi az egyes opciókat (amint azt az a előtti szöveg jelzi )
záradékzáródás), majd dolgozza fel a kódblokkot (a. után )
idióma) a helyes eredményért.
Ne feledje, hogy kettő van ;
nyilatkozatvégi terminátorok az egyes sorok végén. Ennek oka egyszerű; a normál Bash-szintaxis megköveteli, hogy rendelkezzen legalább egy befejező szóhasználattal ;
(kivéve, ha már egy sor végén van), de a case .. esac
állításra van szükségünk ;
annak jelzésére, hogy egy adott esetkód-végrehajtási blokk kódblokkját szüntetjük meg.
Láthatjuk, hogyan definiáltuk a kódot mindkét esetben, ahol 1
és 2
átkerülnek a szkriptbe, ill. Mi történik azonban, ha mást elhaladunk? Ebben az esetben a sajátunkhoz akarunk ugrani Egyéb záradék, amelyet egyetemes jelez *
idióma.
Látjuk, hogyan haladunk el 1
vagy 2
a szkripthez a megfelelő helyes műveletet hajtják végre; Option was 1/2!
. Azt is látjuk, hogy ha valami mást csinálunk, akkor a *
a kódblokk helyesen van végrehajtva, és szépen megjelenik az első átadott változónk is a szkript számára. Mi történne, ha egyetlen opciót sem adnánk át a szkriptünknek? Az case .. esac
kódot továbbra is kiértékeljük, és mivel semmi nem felel meg, kivéve az összes befogadásunkat *
záradék, hogy az egyiket végrehajtják:
Tehát mi történne, ha feltételeznénk, hogy valami logikusnak tűnhet, hogy egyetlen dolgot elhagyhatunk ;
utasítás mindegyik sorának végétől case .. esac
záradék egyszerűen azért, mert egyidejűleg elérik az EOL-t (a sor végét)?
Vegye figyelembe, hogy csak egyetlen végződés ;
ebben a szkriptben használták. Bash ezt nem engedélyezi, és hiba keletkezik; végső szintaxisa ;;
szükséges, és valamit szem előtt kell tartani az írás során case .. esac
nyilatkozatok
Miért eset .. esac És nem ha?
Kiírhatnánk az előző kódot is egy if
nyilatkozat:
#!/bin/bash if [ "${1}" == "1" ]; then echo "Option was 1!" elif [ "${1}" == "2" ]; then echo "Option was 2!" else echo "Option was something else: '${1}'"; fi
Ez a kód minőségében és rövidségében összehasonlíthatónak tűnik a miénkkel case .. esac
kódot, és az adott helyzetekben és az ilyen jellegű speciális esetekben gyakran egy if .. then .. elif .. else .. fi
alapú megoldás remekül fog menni.
Ez azt jelenti, hogy ha és amikor a kiválasztás bonyolultsága bonyolultabbá vagy nagyobbá válik, vagy ha többrétegű esetválasztást kell végrehajtani (vegye figyelembe, hogy case .. esac
beágyazhatók), megtérülhet a használata case .. esac
nyilatkozatok helyett.
A. Másik szép tulajdonsága case .. esac
állítások szerint két lehetséges opciót lehet felsorolni egy kód végrehajtási blokkhoz, amint azt a következő példánkban láthatjuk, de ezt a standard Bash-szel is meg kell tenni if
utasításokat, például a -a
(ésés -o
(vagy) lehetőségek a tesztzáradékunkon belül és egy másodlagos tesztzáradék megadása. Például, if [ "${1}" -eq 1 -o "${1}" -eq 3 ]; then ...
Ne feledje, hogy itt numerikus összehasonlításokat is használtunk szövegalapú összehasonlítások helyett, mint a fenti példánkban.
További információ a if .. then .. else .. elif .. fi
feltételes, elolvashatja cikkünket is Feltételes tesztelés Bash-ban: ha, akkor, más, elif.
Esetünk bővítése
Bővítsük az előző szkriptünket, és tegyük kissé összetettebbé a feltételeinket:
#!/bin/bash case "${1}" in 1|3) echo "Option was 1!" echo "Or, option was 3!";; 2|'a') case "${1}" in 2) echo "Option was 2!";; 'a') echo "Option was 'a'!";; esac;; *) echo "Option was something else: '${1}'";; esac
Ebben az esetben két lehetséges lehetőséget soroltunk fel az egyes kódblokkokhoz, és elválasztottuk őket egy a-val |
szétválasztó. Vegye figyelembe, hogy minden jól működik és a bemenetek 1
és 3
helyesen vannak elemezve. A második kódblokkban létrehoztunk egy beágyazott esetet, és minden lehetséges bemenetet felhasználtunk a második kódblokkhoz (mégpedig 2
és a
) új lehetőségként a beágyazott / másodlagos esac-ban.
Ez ismét hibátlanul működik. A kódon keresztül folyik az első case
nyilatkozat, az 2|'a'
ág veszik van 2
vagy a
átadódik, majd a második case
biztosítja, hogy akár 2
vagy a
egyenként van kiválasztva. Érdekes a használata is ;;
valahányszor meg akarunk szüntetni egy kódblokkot egy adott opciónál, ez vonatkozik a beágyazottak felmondására is case .. esac
, ismét a ;;
, azaz esac;;
.
Csomagolás
Ebben az oktatóanyagban a Bash alapú gyakorlati példákat néztük meg case .. esac
nyilatkozatok. Láttuk azt is, hogy az esetmegállapítások hol a jobbak, hol a hagyományosabbak if .. then .. fi
alapú állítások.
Ha Bash érdekel, akkor megtalálhatja Alapozás: Bash Loops: for, while és amíg, Bash folyamat leállítási hackek és A fájlnevek helyes elemzése a Bash fájlban hogy érdekes legyen.
Élvezd!