Hogyan kell használni az esetet .. esac nyilatkozatok a Bash-ban – CloudSavvy IT

Avatar Gadam | 2021.02.10. 56 Views 0 Likes 0 Ratings

56 Views 0 Ratings Rate it

[ad_1]

Bash Shell

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.

Egyszerű eset .. esac nyilatkozat a Bash-ban

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:

Ha változót nem adunk át a teszt szkriptünkhöz, az a mi esetünkben a * záradék miatt is működik .. esac utasítás

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)?

Helytelen kódblokkolás a Bash-ügyben..esac utasítás

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

Az eset..esac állítás alternatívája egy if..majd..élif..más..fi állítással

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

Bonyolultabb eset .. esac nyilatkozat a Bash-ban további szelektorokkal

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!

[ad_2]
Source link