Šioje pamokoje pamatysime, kaip galime naudoti „If-then-Else“ teiginius mūsų rašomuose „Bash“ aplinkos scenarijuose. „If-then-Else“ teiginiai yra naudinga priemonė, padedanti apibrėžti scenarijaus veiksmų kelią, kai įvykdomos kai kurios sąlygos. Pažiūrėkime, kokia yra teiginių „If-then-Else“ sintaksė:
jeiKAI KOMANDOS;tadaTHEN-COMMANDS;
KitasKITOS KOMANDOS;
būti
Kaip parodyta aukščiau pateiktoje komandoje, jei nustatyta, kad KELIOS KOMANDOS yra teisingos arba jos grąžinimo būsena yra 0, THEN-COMMANDS bus vykdomos. Jei taip nėra, vykdomos KITOS KOMANDOS. Kai kuriose komandose mes paprastai palyginame eilutes arba palyginame vertes sveikų skaičių pavidalu. Taip pat galime atlikti daugybę operacijų, susijusių su failais. Pažvelkime į keletą pagrindinių komandų pavyzdžių, kurie dažniausiai naudojami dirbant su failo sąlygomis:
Pirminis | Reikšmė |
---|---|
[ -į] | Pateikia tiesa, kai yra FILE. |
[-b] | Grąžina „true“, kai yra FILE, ir yra specialus bloko failas. |
[-c] | Grąžina „true“, kai yra FILE, ir yra specialus simbolių failas. |
[-d] | Grąžina true, kai FILE yra ir yra katalogas. |
[ -Ir] | Pateikia tiesa, kai yra FILE. |
[-f] | Pateikia tiesa, kai FILE yra ir yra įprastas failas. |
[-g] | Grąžina true, kai FILE yra ir jo SGID bitas nustatytas. |
[-h] | Grąžina „true“, kai FILE yra, ir yra simbolinė nuoroda. |
[-k] | Grąžina tikrąją, kai FILE yra ir jos lipnus bitas yra nustatytas. |
[-p] | Grąžina teisingą, kai FILE yra ir yra pavadintas vamzdis (FIFO). |
[-r] | Pateikiama tiesa, kai FILE yra ir yra skaitomas. |
[-s] | Pateikiama tiesa, kai FILE yra ir jo dydis didesnis nei nulis. |
[-t] | Pateikiama tiesa, kai failų aprašas FD yra atidarytas, ir nurodo terminalą. |
[-u] | Grąžina true, kai FILE yra ir nustatytas jo SUID (nustatytas vartotojo ID) bitas. |
[-in] | Pateikiama tiesa, kai FILE yra ir yra įrašomas. |
[-x] | Pateikiama tiesa, kai FILE yra ir yra vykdomas. |
[-O] | Pateikiama tiesa, kai FILE yra ir priklauso veiksmingam vartotojo ID. |
[-G] | Pateikiama tiesa, kai FILE yra ir priklauso veiksmingam grupės ID. |
[-TAS] | Grąžina „true“, kai FILE yra, ir yra simbolinė nuoroda. |
[-N] | Pateikiama tiesa, kai FILE yra ir buvo pakeista nuo paskutinio skaitymo. |
[-S] | Grąžina true, kai FILE yra ir yra lizdas. |
THEN-COMMANDS ir ELSE-COMMANDS gali būti bet kokios galiojančios UNIX operacijos arba bet kokia vykdomoji programa. Atkreipkite dėmesį, kad tada ir būti komandos yra atskirtos kabliataškiu, nes jos laikomos visiškai atskirais scenarijaus elementais.
Jei-tada-kitas paprastas pavyzdys
Pradėkime pamoką nuo labai paprasto pavyzdžio su teiginiais „Jei-tada-kitaip“.
Čia yra programos pavyzdys:
Štai rezultatas, kurį matome vykdydami scenarijų:
$. ifelse1.shVertybės tos pačios!
$
Naudojant komandinės eilutės argumentus
Savo scenarijuose taip pat galime naudoti komandinės eilutės argumentus, o argumentų skaičių ir pačias vertes naudoti kaip sąlygą mūsų apibrėžtame IF sakinyje. Pirmiausia apibrėžiame teksto failą, kurio turinys yra toks:
Mano vardas LinuxHint. Man patinka serveriai, ypač „Ubuntu“. Jie tokie
galutinai!
Dabar galime parašyti scenarijų, kuris nustato, ar žodis yra teksto faile, ar ne. Dabar apibrėžkime scenarijų:
išmetė „Rasti 1 USD iš 2 USD“suimti 1 USD 2 USD
jei [ $? -gimęs 0 ]
tada
išmetė „$ 1 nerasta faile $ 2“.
Kitas
išmetė „$ 1 rasta faile $ 2“.
būti
išmetė „Scenarijus baigtas“.
Šis scenarijus yra labai dinamiškas. Ji laiko žodį, kurį reikia rasti, ir failą, kurį reikia ieškoti iš pačios komandinės eilutės. Dabar esame pasiruošę paleisti savo scenarijų:
. ifelse2.sh meilė hello.txtPamatysime tokį rezultatą:
Meilės radimasįsveiki.txtmeilė rastaį failąsveiki.txt.
Scenarijus baigtas.
Tikrinamas komandinės eilutės argumentų skaičius
IF sakinyje galime net patikrinti, kiek komandinės eilutės argumentų buvo perduota komandai, kad galėtume veikti pagal tą patį:
skaičiuoti=$ #jei [ ! $ skaičių -gt 1 ]
tada
išmetė „Nepakanka argumentų“
Kitas
išmetė 'Šaunuolis!'
būti
Dabar paleiskite šį scenarijų, pamatysime tokį rezultatą:
Jei-tada-Elif-Else pareiškimai
Mes taip pat galime turėti kelis IF teiginius tame pačiame bloke, kad susiaurintume sprendimo kelią, kuriuo mūsų programa eina, kad įvykdytume apibrėžtas komandas. Čia yra sintaksė, skirta apibrėžti kelis IF teiginius mūsų scenarijuose:
jeiBANDYMO KOMANDOS;tada
REZULTATAI-KOMANDOS;
elifas
KITOS KOMANDOS;
tada
KITOS REZULTATŲ KOMANDOS;
Kitas
ALTERNATYVOS KOMANDOS;
būti
Tai atrodo gana pažįstama ir taip pat lengva sekti. Apibrėžkime paprastą pavyzdį, kaip nustatyti medžio veikimą:
skaičiuoti=$ #jei [ $ skaičių -ekv 1 ]
tada
išmetė „Rastas tik vienas argumentas“.
elifas [ $ skaičių -ekv 2 ]
tada
išmetė „Geriau, rasti du argumentai“.
Kitas
išmetė 'Geras darbas, rasta daug argumentų!'
būti
Štai ką mes gauname su šia komanda:
Naudojant dėklus
IF-ELSE teiginiai yra naudingi, kai turite didelį pasirinkimų, kuriuos turite apsispręsti, sąrašą. Bet jei norite atlikti veiksmą tik keliais atvejais, kai tiksliai sutampa su rezultatu, mes galime naudoti CASE teiginius ir „Bash“ scenarijuose. Jo sintaksė atrodo taip:
atvejisIŠRAIŠKAįBYLA1)KOMANDOS VYKDYTI;BYLA2)KOMANDOS VYKDYTI;
BYLA2)KOMANDOS VYKDYTI;
...)KOMANDOS VYKDYTI;
*)KOMANDOS VYKDYTI;
esac
Paskutinis atvejis su * veikia kaip numatytasis atvejis ir bus įvykdytas, kai nebus nustatyta, kad nė vienas iš aukščiau apibrėžtų atvejų neatitinka.
Greitai sukonstruosime paprastą pavyzdį, naudodami CASE teiginius:
atvejis „1 USD“ į1)
išmetė „Vertė yra 1.“
;;
2)
išmetė „Vertė yra 2.“
;;
3)
išmetė „Vertė yra 3.“
;;
*)
išmetė „Praėjo kita vertė“.
esac
Kiekvienas CASE teiginys baigiamas ;; (dvigubas dvitaškis). Štai ką mes gauname su šia komanda:
Išvada
Šioje pamokoje apžvelgėme, kaip galime naudoti IF-ELSE, IF-THEN-ELIF ir CASE teiginius mūsų apibrėžtuose „Bash“ scenarijuose, kad atliktume konkrečius veiksmus, remdamiesi vertybėmis, esančiomis mūsų programose arba perduodamomis naudotojui naudojant pozicinį parametrus.