„Bash If-then-Else“ pavyzdys

Bash If Then Else Example



Š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:



Jei pavyzdys

Jei pavyzdys





Štai rezultatas, kurį matome vykdydami scenarijų:

$. ifelse1.sh
Vertybė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.txt

Pamatysime tokį rezultatą:

Meilės radimasįsveiki.txt
meilė 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ą:

Komandinės eilutės argumentai

Komandinės eilutės argumentai

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:

Jei tada Elif Else pavyzdys

Jei tada Elif Else pavyzdys

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:

CASE pavyzdys

CASE pavyzdys

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.