Welcome to Our Website

Bash Scripting Tutorial-5. If stations

If Statements!

döntések, döntések.

Bevezetés

Bash, ha az állítások nagyon hasznosak. Ebben a részben a Bash Scripting Tutorial megtudhatja, hogyan lehet használni, ha nyilatkozatokat a Bash scriptek, hogy segítsen automatizálni feladatokat.

Ha a kijelentések (és szorosan kapcsolódó eseti nyilatkozatok) lehetővé teszik számunkra, hogy döntéseket hozzunk a Bash szkriptjeinkben. Lehetővé teszik számunkra, hogy eldöntsük, futtatunk-e egy kóddarabot az általunk meghatározott feltételek alapján., Ha a kijelentések, hurkokkal kombinálva (amelyeket a következő részben nézünk meg) lehetővé teszik számunkra, hogy sokkal összetettebb szkripteket készítsünk, amelyek nagyobb feladatokat oldhatnak meg.

mint amit az előző szakaszokban megnéztünk, szintaxisuk nagyon specifikus, így maradjon az összes apró részlet tetején.

Basic If Statements

a basic if statement hatékonyan mondja, ha egy adott teszt igaz, akkor hajtson végre egy adott műveletsort. Ha ez nem igaz, akkor ne hajtsa végre ezeket a műveleteket., Ha követi az alábbi formátumban:

ha
akkor
<parancsok>
fi

Semmit között, akkor fi (ha fordítva) lesz végrehajtva, ha a teszt (a szögletes zárójelek jelzik), az igaz.

nézzünk egy egyszerű példát:

if_example.sh

  1. #!/ bin / bash
  2. # Basic if statement
  3. if
  4. if

  5. then
  6. echo Hey that \ ‘s a large number.,
  7. pwd
  8. fi
  9. date

bontsuk le:

  • 4. sor-lássuk, hogy az első parancssori argumentum nagyobb-e, mint 100
  • 6.és 7. sor – csak akkor fut, ha a teszt a 4. sorban igaz. Annyi parancsod lehet itt, amennyit csak akarsz.
  • 6. sor-az egyetlen idézet ( ‘ ) előtti backslash ( \ ) szükséges, mivel az egyetlen idézetnek különleges jelentése van a bash számára, és nem akarjuk ezt a különleges jelentést. A backslash elmenekül a különleges jelentéstől, hogy ismét normál egyszerű idézetté váljon.,
  • 8 – fi vonal jelzi az if utasítás végét. Minden parancs után ez lesz futtatni, mint a normál.
  • 10. sor-mivel ez a parancs az if utasításon kívül esik, az if utasítás eredményétől függetlenül fut.
  1. . /if_example.sh 15
  2. Péntek 5 február 9: 06: 30 2021
  3. . /if_example.sh 150
  4. Hey ez egy nagy szám.
  5. / home / ryan / bin
  6. 5 február 9: 06: 30 2021

mindig jó gyakorlat a szkriptek tesztelése olyan bemenettel, amely lefedi a lehetséges forgatókönyveket.,

Test

a fenti if utasítás szögletes zárójelei () valójában hivatkozás a parancs tesztre. Ez azt jelenti, hogy az összes olyan operátor, amely a vizsgálatot lehetővé teszi, itt is használható. Keresse meg a man oldalt a teszthez, hogy megnézze az összes lehetséges operátort (nagyon sok van), de a leggyakoribbak közül néhányat az alábbiakban felsorolunk.

operátor leírás
! Kifejezés a kifejezés hamis.
-n STRING a STRING hossza nagyobb, mint nulla.,
– z STRING a STRING hossza nulla (azaz üres).
STRING1 = STRING2 STRING1 egyenlő STRING2
STRING1!= STRING2 STRING1 nem egyenlő STRING2
INTEGER1-eq INTEGER2 INTEGER1 számszerűen egyenlő INTEGER2
INTEGER1-gt INTEGER2 INTEGER1 számszerűen nagyobb, mint INTEGER2
integer1-lt integer2 INTEGER1 számszerűen kisebb, mint az integer2
-d file fájl létezik és egy könyvtár.,
-E fájl fájl létezik.
-R FILE fájl létezik, és az olvasási engedély megadásra kerül.
-s FILE fájl létezik, mérete nagyobb, mint nulla (azaz. nem üres).
-W FILE fájl létezik, és az írási engedély megadásra kerül.
-X FILE fájl létezik, és az execute engedély megadásra kerül.

néhány megjegyzés:

  • = kissé eltér az eq-tól. vissza fog térni hamis, mint = nem egy string összehasonlítás (azaz., karakter karakter ugyanaz) mivel-eq nem numerikus összehasonlítás jelentése visszatér igaz.
  • amikor a fenti fájlra utalunk, valójában egy elérési utat értünk. Ne feledje, hogy egy elérési út lehet abszolút vagy relatív, és hivatkozhat egy fájlra vagy egy könyvtárra.
  • mert ez csak egy hivatkozás a parancs teszt lehet kísérletezni, és baj lőni teszt a parancssorban, hogy megbizonyosodjon arról, hogy megértjük a viselkedését helyes.
  1. test 001 = 1
  2. echo $?
  3. 1
  4. teszt 001-eq 1
  5. echo $?,
  6. 0
  7. érintse meg a myfile
  8. test-s myfile
  9. echo $?
  10. 1
  11. LS / etc > myfile
  12. test-s myfile
  13. echo $?
  14. 0

bontsuk le:

  • 1. sor-húr alapú összehasonlítás végrehajtása. A teszt nem nyomtatja ki az eredményt, ezért ehelyett ellenőrizzük a kilépési állapotot, amit a következő sorban fogunk tenni.
  • 2. sor-a $változó? tartja a korábban futtatott parancs kilépési állapotát (ebben az esetben teszt). 0 azt jelenti, igaz (vagy siker). 1 = hamis (vagy hiba).,
  • 4. sor – ezúttal számszerű összehasonlítást végzünk.
  • 7. sor-hozzon létre egy új üres myfile fájlt (feltételezve, hogy a myfile még nem létezik).
  • 8. sor – a myfile mérete nagyobb, mint nulla?
  • 11. sor-Átirányítson néhány tartalmat a myfile-ba, így mérete nagyobb, mint nulla.
  • 12. sor-tesztelje újra a myfile méretét. Ezúttal igaz.

behúzva

észre fogod venni, hogy a fenti if nyilatkozatban behúztuk azokat a parancsokat, amelyeket futtattunk, ha a kijelentés igaz volt., Ezt nevezik behúzás, és fontos része az írás jó, tiszta kód (bármely nyelven, nem csak Bash szkriptek). A cél az olvashatóság javítása és az egyszerű, buta hibák megnehezítése. Nincsenek szabályok a Bash-ben való behúzásra vonatkozóan, így behúzhat vagy nem behúzhat, ahogy tetszik, és a szkriptek továbbra is pontosan ugyanúgy futnak. Nagyon ajánlom, hogy tegye be a kódot (különösen, ha a szkriptek nagyobbak lesznek), különben egyre nehezebb lesz látni a szkriptek szerkezetét.,

beágyazott if

a behúzásról beszél. Íme egy tökéletes példa arra, amikor megkönnyíti az életet az Ön számára. Lehet, hogy annyi, ha nyilatkozatok szükséges belül a script. Az is lehetséges, hogy egy if nyilatkozat belsejében egy másik if nyilatkozatot. Például érdemes elemezni a parancssorban megadott számot, mint így:

bontsuk le:

  • 4. sor-csak akkor hajtsa végre a következőket, ha az első parancssori argumentum nagyobb, mint 100.
  • 8. sor-ez az if utasítás könnyű változata., Ha szeretnénk ellenőrizni egy kifejezést, akkor használhatjuk a kettős zárójeleket, mint a változók esetében.
  • 10. sor-csak akkor fut, ha mindkét állítás igaz.

yo dawg, azt csorda tetszik, ha nyilatkozatok így tettem egy IF nyilatkozatot belül if nyilatkozat.

Xzibit

(Xzibit valójában nem mondta, de biztos vagyok benne, hogy ő lett volna, ha ő házigazdája Pimp én Bash Script.,)

lehet fészket annyi, ha nyilatkozatok, ahogy tetszik, de mint általános ökölszabály, ha kell fészket több mint 3 szint mély akkor valószínűleg egy gondolni átszervezése a logika.

ha máshol

néha egy bizonyos műveletkészletet akarunk végrehajtani, ha egy állítás igaz, és egy másik műveletkészlet, ha hamis. Ezt el tudjuk fogadni az else mechanizmussal.,

ha
akkor
<parancsok>
más
<egyéb parancsok>
fi

Most már könnyen olvasni a fájlt, ha a szolgáltatásokat, mint egy parancssori argumentum, mást olvasni a STDIN-t.

else.sh

  1. #!/bin/bash
  2. # más példa
  3. ha az
  4. akkor
  5. nl $1
  6. más
  7. nl /dev/stdin
  8. fi

Ha Elif Más

Néha lehet, hogy egy sor feltételek vezethet, hogy a különböző utak.,

ha
akkor
<parancs>
elif
majd
<különböző parancsok>
<egyéb parancsok>
Fi

például előfordulhat, hogy ha 18 éves vagy annál idősebb, akkor mehet a pártba. Ha nem, de van egy levelet a szüleid lehet menni, de vissza kell éjfél előtt. Különben nem mehetsz.

annyi elif ág lehet, amennyit csak akar. A végső else szintén opcionális.,

logikai műveletek

néha csak akkor akarunk valamit tenni, ha több feltétel teljesül. Máskor szeretnénk végrehajtani a műveletet, ha az egyik több feltétel teljesül. Ezeket a logikai operátorokkal tudjuk befogadni.

  • és – &&
  • vagy – |

például csak akkor akarunk műveletet végrehajtani, ha a fájl olvasható, és a mérete nagyobb, mint nulla.

and.sh

  1. #!,/ bin / bash
  2. # és példa
  3. if &&
  4. majd
  5. echo ez a fájl hasznos.
  6. fi

talán szeretnénk valami kissé eltérőt végrehajtani, ha a felhasználó bob vagy andy.

or.sh

  1. #!/bin/bash
  2. # vagy pl.
  3. ha ||
  4. akkor
  5. ls-alh
  6. más
  7. ez
  8. fi

Esetben Kimutatások

Néha érdemes, hogy különböző utak alapján változó megfelelő egy sor minták., Jól jönne egy sor if és elif nyilatkozatok, de ez hamarosan növekedni unweildly. Szerencsére van egy eset nyilatkozat, amely lehet, hogy a dolgok tisztább., It’s a little hard to explain so here are some examples to illustrate:

case <variable> in
<pattern 1>)
<commands>
;;
<pattern 2>)
<other commands>
;;
esac

Here is a basic example:

case.sh

  1. #!,/bin/bash
  2. # példa
  3. az esetben $1
  4. start)
  5. echo kezdő
  6. ;;
  7. stop)
  8. echo megállni
  9. ;;
  10. restart)
  11. echo újraindítása
  12. ;;
  13. *)
  14. echo don\’t
  15. ;;
  16. esac

nézzük csak:

  • 4. Sor – Ez a vonal kezdődik a casemechanism.
  • 5. sor-ha $1 egyenlő “start”, akkor hajtsa végre a következő műveleteket. a) A minta végét jelenti.,
  • 7. sor-azonosítjuk ennek az állításkészletnek a végét kettős félig kettősponttal (;;). Ezt követően a következő eset, amelyet figyelembe kell venni.
  • 14. sor-Ne feledje, hogy a teszt minden esetben minta. A * tetszőleges számú karaktert jelent. Ez essentialy a fogás minden, ha az, ha egyik más esetben egyezik. Nem szükséges, de gyakran használják.
  • 17. sor-az esac hátrafelé van, és azt jelzi, hogy az esettanulmány végén vagyunk. Bármely más kijelentés ezt követően normálisan kerül végrehajtásra.
  1. . /case.sh start
  2. starting
  3. .,/case.sh újraindítás
  4. újraindítás
  5. ./case.sh bla
  6. nem tudom

most nézzünk egy kissé összetettebb példát, ahol a mintákat egy kicsit többet használják.

összefoglaló

ha parancskészletet hajt végre, ha egy teszt igaz. különben, ha a teszt nem igaz, akkor hajtson végre egy másik parancskészletet. elif ha az előző teszt hamis, akkor próbálja ki ezt. && végezze el a műveletet. / / Végezze el az or műveletet. case válasszon egy parancskészletet, amelyet egy adott mintának megfelelő karakterlánctól függően hajt végre.,
a behúzás a kódot sokkal könnyebb olvasni. Ez egyre fontosabb, mivel a Bash szkriptek hosszabb ideig tartanak. Tervezés most, hogy a szkriptek egyre egy kicsit bonyolultabb akkor valószínűleg szeretne eltölteni egy kis időt gondolkodni, hogyan szerkezet őket, mielőtt búvárkodás.

tevékenységek

most hozzunk néhány döntést.

  • hozzon létre egy bash szkriptet, amely parancssori argumentumként 2 számot vesz igénybe. A két szám közül a nagyobbat nyomtatja a képernyőre.,
  • hozzon létre egy bash szkriptet, amely parancssori argumentumként fogad el egy fájlt, és bizonyos módon elemzi azt. pl. ellenőrizheti, hogy a fájl végrehajtható vagy írható-e. Ki kell nyomtatnia egy bizonyos üzenetet, ha igaz,a másik pedig hamis.
  • hozzon létre egy bash szkriptet, amely egy üzenetet nyomtat annak alapján, hogy a hét melyik napja van (pl. “Boldog púp nap” az Esküvőnapra, “TGIF” péntekre stb.).

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük