Ebben a leckében látni fogjuk, hogyan használhatjuk az If-then-Else utasításokat az általunk írt Bash környezeti szkriptekben. Az If-then-Else utasítások hasznos eszköz a szkript cselekvési útvonalának meghatározásához, ha bizonyos feltételek teljesülnek. Lássuk, mi a szintaxisa az If-then-Else utasításoknak:
haNÉHÁNY PARANCS;azutánAKKOR-PARANCSOK;
másMÁS-PARANCSOK;
lenni
A fenti parancsban, ha a SOME-COMMANDS igaznak bizonyul, vagy visszatérési állapota 0, a THEN-COMMANDS végrehajtásra kerül. Ha ez nem így van, akkor ELSE-COMMANDS kerül végrehajtásra. A NÉHÁNY PARANCSBAN általában String-összehasonlítást vagy érték-összehasonlítást végezünk egész számok formájában. Sok olyan műveletet is elvégezhetünk, amelyek fájlokat tartalmaznak. Nézzünk néhány példát az elsődleges parancsokra, amelyeket főleg fájl alapú feltételek mellett használnak:
Elsődleges | Jelentése |
---|---|
[ -nak nek ] | Igaz értéket ad vissza, ha létezik FILE. |
[-b] | Igaz értéket ad vissza, ha a FILE létezik, és blokkolt speciális fájl. |
[-c] | Igaz értéket ad vissza, ha a FILE létezik, és egy speciális karakterfájl. |
[-d] | Igaz értéket ad vissza, ha a FILE létezik és könyvtár. |
[-És] | Igaz értéket ad vissza, ha létezik FILE. |
[-f] | Igaz értéket ad vissza, ha a FILE létezik, és rendes fájl. |
[-g] | Igaz értéket ad vissza, ha a FILE létezik és az SGID bitje be van állítva. |
[-h] | Igaz értéket ad vissza, ha a FILE létezik, és szimbolikus link. |
[-k] | Igaz értéket ad vissza, ha a FILE létezik és a ragadós bit be van állítva. |
[-p] | Igaz értéket ad vissza, ha a FILE létezik, és egy elnevezett cső (FIFO). |
[-r] | Igaz értéket ad vissza, ha a FILE létezik és olvasható. |
[-s] | Igaz értéket ad vissza, ha a FILE létezik, és mérete nullánál nagyobb. |
[-t] | Igaz értéket ad vissza, ha az FD fájlleíró nyitva van, és terminálra utal. |
[-u] | Igaz értéket ad vissza, ha a FILE létezik, és a SUID (felhasználói azonosító beállítása) bit beállítása megtörtént. |
[ -ban ben ] | Igaz értéket ad vissza, ha a FILE létezik és írható. |
[-x] | Igaz értéket ad vissza, ha a FILE létezik és végrehajtható. |
[-O] | Igaz értéket ad vissza, ha a FILE létezik, és a tényleges felhasználói azonosító tulajdonában van. |
[-G] | Igaz értéket ad vissza, ha a FILE létezik, és a tényleges csoportazonosító tulajdonában van. |
[ -AZ ] | Igaz értéket ad vissza, ha a FILE létezik, és szimbolikus link. |
[-N] | Igaz értéket ad vissza, ha a FILE létezik, és az utolsó olvasás óta módosult. |
[-S] | Igaz értéket ad vissza, ha a FILE létezik, és egy foglalat. |
A THEN-COMMANDS és az ELSE-COMMANDS bármilyen érvényes UNIX művelet vagy bármilyen végrehajtható program lehet. Vegye figyelembe, hogy a azután és lenni a parancsokat pontosvessző választja el egymástól, mivel a szkript teljesen különálló elemeinek tekinthetők.
Ha-akkor-más egyszerű példa
Kezdjük a leckét egy nagyon egyszerű példával, ha-akkor-más állításokkal.
Itt egy minta program:
Íme a kimenet, amelyet a szkript futtatásakor látunk:
$. ifelse1.shAz értékek ugyanazok!
$
Parancssori argumentumok használata
A parancssori argumentumokat is használhatjuk a szkriptjeinkben, és az argumentumok számát és magát az értékeket használhatjuk feltételként az általunk meghatározott IF utasításban. Először definiálunk egy szöveges fájlt a következő tartalommal:
A nevem LinuxHint. Szeretem a szervereket, főleg az Ubuntut. Olyanok
terminális!
Most írhatunk egy szkriptet, amely megállapítja, hogy egy szó előfordul -e egy szövegfájlban vagy sem. Most határozzuk meg a szkriptet:
kidobta '1 dollárt talál 2 dollárban'markolat $ 1 2 USD
ha [ $? -született 0 ]
azután
kidobta '$ 1 nem található a $ 2 fájlban.'
más
kidobta '$ 1 található a $ 2 fájlban.'
lenni
kidobta - A forgatókönyv elkészült.
Ez a szkript nagyon dinamikus. A parancssorból a keresendő szót és a keresendő fájlt veszi figyelembe. Most készen állunk a szkript futtatására:
. ifelse2.sh szerelem hello.txtLátni fogunk egy ilyen kimenetet:
A szerelem megtalálásaban benhello.txtmegtalálta a szerelmetban ben fájlthello.txt.
A szkript elkészült.
A parancssori argumentumok számának ellenőrzése
Egy IF utasításon belül még azt is ellenőrizhetjük, hogy hány parancssori argumentumot adtak át a parancsnak, hogy ugyanezt tegyük:
számol=$ #ha [ ! $ gróf -gt 1 ]
azután
kidobta 'Nincs elég érv'
más
kidobta 'Szép munka!'
lenni
Futtassuk most ezt a szkriptet, a következő kimenetet látjuk:
Ha-akkor-Elif-Else nyilatkozatok
Ugyanazon blokkban több IF utasítás is szerepelhet, hogy szűkítsük a program által hozott döntési utat az általunk meghatározott parancsok végrehajtásához. Íme a szintaxis több IF utasítás meghatározásához a szkriptjeinkben:
haTESZT-PARANCSOK;azután
EREDMÉNY-PARANCSOK;
elif
MÁS PARANCSOK;
azután
EGYÉB EREDMÉNY-PARANCSOK;
más
ALTERNATE-PARANCSOK;
lenni
Ez elég ismerősnek tűnik, és könnyen követhető is. Adjunk meg egy egyszerű példát a fa működésének megállapításához:
számol=$ #ha [ $ gróf -eq 1 ]
azután
kidobta - Csak egy érvet találtunk.
elif [ $ gróf -eq 2 ]
azután
kidobta - Jobb, két érvet találtunk.
más
kidobta 'Jó munkát, sok érvet talált!'
lenni
Ezt a parancsot kapjuk vissza:
Az esetfeltételek használata
Az IF-ELSE utasítások akkor hasznosak, ha nagy listája van a döntésekről. De ha csak néhány esetben szeretne végrehajtani egy műveletet, ha pontosan egyezik az eredménnyel, akkor a CASE utasításokat is használhatjuk a Bash szkriptekben. Szintaxisa így néz ki:
ügyKIFEJEZÉSban benESET1)VÉGREHAJTÁSI PARANCSOK;ESET2)VÉGREHAJTÁSI PARANCSOK;
ESET2)VÉGREHAJTÁSI PARANCSOK;
...)VÉGREHAJTÁSI PARANCSOK;
*)VÉGREHAJTÁSI PARANCSOK;
esac
Az utolsó, * -vel jelölt eset alapértelmezett esetként működik, és akkor kerül végrehajtásra, ha a fent meghatározott esetek egyike sem egyezik meg.
Gyorsan készítsünk egy egyszerű példát a CASE utasítások segítségével:
ügy „1 USD” ban ben1)
kidobta 'Az érték 1.'
;;
2)
kidobta 'Az érték 2.'
;;
3)
kidobta 'Az érték 3.'
;;
*)
kidobta 'Más érték telt el.'
esac
Minden CASE utasítás zárva van ;; (kettős pontosvessző jel). Ezt a parancsot kapjuk vissza:
Következtetés
Ebben a leckében megvizsgáltuk, hogyan használhatjuk az IF-ELSE, IF-THEN-ELIF és CASE utasításokat az általunk definiált Bash-szkriptekben, hogy konkrét műveleteket hajtsunk végre a programjainkban létező vagy a felhasználó által a pozíciós paramétereket.