V tej lekciji bomo videli, kako lahko uporabimo stavke If-Then-Else v skriptih okolja Bash, ki jih pišemo. Izjave If-Then-Else so uporabno orodje za določanje poti dejanja skripta, ko so izpolnjeni nekateri pogoji. Poglejmo, kakšna je sintaksa stavkov If-Then-Else:
čeNEKAJ UKAZOV;potemTUDI-UKAZI;
drugačeDRUGE UKAZE;
biti
V zgornjem prikazanem ukazu, če se ugotovi, da so SOME-COMMANDS resnične ali da je stanje vrnitve 0, se izvedejo THEN-COMMANDS. Če temu ni tako, se izvedejo DRUGE UKAZI. V VELIKI UKAZI običajno naredimo nekaj primerjav nizov ali vrednosti v obliki celih števil. Izvajamo lahko tudi veliko operacij, ki vključujejo datoteke. Oglejmo si nekaj primerov primarnih ukazov, ki se uporabljajo predvsem pri delu z datotečnimi pogoji:
Primarno | Pomen |
---|---|
[-do] | Vrne true, ko obstaja FILE. |
[-b] | Vrne true, če FILE obstaja & je posebna datoteka bloka. |
[-c] | Vrne vrednost true, če FILE obstaja & je posebna datoteka z znaki. |
[-d] | Vrne true, ko FILE obstaja & je imenik. |
[-In] | Vrne true, ko obstaja FILE. |
[-f] | Vrne true, če FILE obstaja & je navadna datoteka. |
[-g] | Vrne vrednost true, ko FILE obstaja in je nastavljen njen bit SGID. |
[-h] | Vrne vrednost true, če FILE obstaja & je simbolna povezava. |
[-k] | Vrne true, ko FILE obstaja in je nastavljen njen lepljivi bit. |
[-p] | Vrne true, če FILE obstaja & je poimenovana cev (FIFO). |
[-r] | Vrne vrednost true, če FILE obstaja in je berljiva. |
[-s] | Vrne true, če FILE obstaja in ima velikost večjo od nič. |
[-t] | Vrne true, ko je deskriptor datoteke FD odprt in se nanaša na terminal. |
[-u] | Vrne vrednost true, ko datoteka FILE obstaja in je nastavljen njen bit SUID (nastavljen ID uporabnika). |
[-in] | Vrne vrednost true, če FILE obstaja in je nanjo mogoče zapisati. |
[-x] | Vrne true, ko datoteka FILE obstaja in je izvedljiva. |
[-O] | Vrne vrednost true, če FILE obstaja in je v lasti dejanskega ID -ja uporabnika. |
[-G] | Vrne true, če FILE obstaja in je v lasti učinkovitega ID -ja skupine. |
[-THE] | Vrne vrednost true, če FILE obstaja & je simbolna povezava. |
[-N] | Vrne vrednost true, ko FILE obstaja in je bila spremenjena od zadnjega branja. |
[-S] | Vrne true, če FILE obstaja & je vtičnica. |
THEN-COMMANDS in ELSE-COMMANDS so lahko vse veljavne operacije UNIX ali kateri koli izvedljiv program. Upoštevajte, da je potem in biti ukazi so ločeni s podpičjem, saj veljajo za popolnoma ločene elemente skripta.
Preprost primer če-potem-drugače
Začnimo našo lekcijo z zelo preprostim primerom z izjavami Če-potem-drugače.
Tu je vzorec programa:
Tukaj je rezultat, ki ga vidimo, ko zaženemo skript:
$. ifelse1.shVrednosti so enake!
$
Uporaba argumentov ukazne vrstice
V svojih skriptih lahko uporabimo tudi argumente ukazne vrstice, število pogojev in vrednosti pa kot pogoj v stavku IF, ki ga definiramo. Najprej določimo besedilno datoteko z naslednjo vsebino:
Moje ime je LinuxHint. Obožujem strežnike, še posebej tiste Ubuntu. Tako so
terminalni!
Zdaj lahko napišemo skript, ki ugotovi, ali se beseda pojavi v besedilni datoteki ali ne. Določimo skript:
vrgel ven 'Iskanje 1 USD v 2 USD'oprijem 1 USD 2 USD
če [ $? -Rojen 0 ]
potem
vrgel ven '$ 1 ni najdeno v datoteki $ 2.'
drugače
vrgel ven 'V datoteki $ 2 je bil najden 1 $.'
biti
vrgel ven 'Skript je dokončan.'
Ta scenarij je zelo dinamičen. Upošteva besedo za iskanje in datoteko za iskanje iz same ukazne vrstice. Zdaj smo pripravljeni zagnati naš skript:
. ifelse2.sh ljubezen hello.txtVideli bomo rezultat, kot je:
Iskanje ljubeznivhello.txtljubezen najdenav mapahello.txt.
Scenarij dokončan.
Preverjanje števila argumentov ukazne vrstice
Znotraj stavka IF lahko celo preverimo, koliko argumentov ukazne vrstice je bilo posredovanih ukazu, da lahko delujemo po istem:
šteti=# USDče [ ! $ count -gt 1 ]
potem
vrgel ven 'Ni dovolj argumentov'
drugače
vrgel ven 'Dobro opravljeno!'
biti
Zaženimo ta skript, videli bomo naslednji izhod:
Izjave If-Then-Elif-Else
V istem bloku imamo lahko tudi več stavkov IF, da zožimo pot odločanja, ki jo naš program izvaja za izvajanje ukazov, ki smo jih definirali. Tukaj je sintaksa za definiranje več stavkov IF v naših skriptih:
čeTEST-UKAZI;potem
REZULTAT-UKAZI;
elif
DRUGI UKAZI;
potem
DRUGI REZULTAT-UKAZI;
drugače
ALTERNATIVNE UKAZE;
biti
To se zdi precej znano in tudi enostavno sledljivo. Določimo preprost primer, da ugotovimo, kako drevo deluje:
šteti=# USDče [ $ count -ekv 1 ]
potem
vrgel ven 'Najden je bil le en argument.'
elif [ $ count -ekv 2 ]
potem
vrgel ven 'Bolje, najdena sta dva argumenta.'
drugače
vrgel ven 'Dobro delo, najdenih je veliko argumentov!'
biti
Evo, kaj dobimo s tem ukazom:
Uporaba poročil o zadevah
Izjave IF-ELSE so uporabne, če imate velik seznam možnosti, za katere se morate odločiti. Če pa želite izvesti dejanje le v nekaj primerih, ki se popolnoma ujemajo z rezultatom, lahko stavke CASE uporabimo tudi v skriptih Bash. Njegova sintaksa izgleda tako:
OvitekIZRAŽANJEvZADEVA 1)UKAZI ZA IZVAJANJE;ZADEVA 2)UKAZI ZA IZVAJANJE;
ZADEVA 2)UKAZI ZA IZVAJANJE;
...)UKAZI ZA IZVAJANJE;
*)UKAZI ZA IZVAJANJE;
esac
Zadnji primer z * deluje kot privzeti primer in se bo izvajal, ko se ne bo ujelo nobeno od zgoraj definiranih primerov.
Na hitro zgradimo preprost primer z uporabo stavkov CASE:
Ovitek '1 USD' v1)
vrgel ven 'Vrednost je 1.'
;;
2)
vrgel ven 'Vrednost je 2.'
;;
3)
vrgel ven 'Vrednost je 3.'
;;
*)
vrgel ven 'Prenesena je druga vrednost.'
esac
Vsak stavek CASE zaključi z ;; (dvojne oznake podpičja). Evo, kaj dobimo s tem ukazom:
Zaključek
V tej lekciji smo pogledali, kako lahko uporabimo stavke IF-ELSE, IF-THEN-ELIF in CASE v skriptih Bash, ki jih opredelimo za izvedbo posebnih dejanj na podlagi vrednosti, ki obstajajo v naših programih ali jih je uporabnik sprejel s pozicijskim parametri.