Bash If-then-Else Esimerkki

Bash If Then Else Example

Tässä oppitunnissa näemme, kuinka voimme käyttää If-then-Else -lausekkeita kirjoittamissamme Bash-ympäristön komentosarjoissa. If-then-Else -lausekkeet ovat hyödyllinen työkalu, jolla voidaan määritellä komentosarjan toimintopolku, kun jotkut ehdot täyttyvät. Katsotaanpa, mikä on syntaksi If-then-Else -lausekkeille:

josJotkut komennot;
sittenTHEN-COMMANDS;
muuMUUT KOMENNOT;
olla

Yllä olevassa komennossa, jos SOME-COMMANDS todetaan oikeaksi tai sen palautustilaksi 0, THEN-COMMANDS suoritetaan. Jos näin ei ole, MUUT KÄSKYT suoritetaan. SOME-COMMANDSissa teemme yleensä jonkin merkkijonovertailun tai arvovertailun kokonaislukujen muodossa. Voimme myös tehdä paljon toimintoja, joihin liittyy tiedostoja. Katsotaanpa joitain esimerkkejä ensisijaisista komennoista, joita käytetään pääasiassa tiedostopohjaisissa olosuhteissa:



Ensisijainen Merkitys
[ -] Palauttaa arvon tosi, kun FILE on olemassa.
[-b] Palauttaa arvon tosi, kun FILE on olemassa ja on lohkon erikoistiedosto.
[-c] Palauttaa arvon tosi, kun FILE on olemassa ja on erikoismerkkitiedosto.
[-d] Palauttaa arvon tosi, kun FILE on olemassa ja on hakemisto.
[-Ja] Palauttaa arvon tosi, kun FILE on olemassa.
[-f] Palauttaa true, kun FILE on olemassa ja on tavallinen tiedosto.
[-g] Palauttaa arvon tosi, kun FILE on olemassa ja sen SGID -bitti on asetettu.
[-h] Palauttaa arvon tosi, kun FILE on olemassa ja on symbolinen linkki.
[-k] Palauttaa arvon true, kun FILE on olemassa ja sen tahmea bitti on asetettu.
[-p] Palauttaa arvon tosi, kun FILE on olemassa ja on nimetty putki (FIFO).
[-r] Palauttaa true, kun FILE on olemassa ja luettavissa.
[-s] Palauttaa arvon tosi, kun FILE on olemassa ja sen koko on suurempi kuin nolla.
[-t] Palauttaa arvon tosi, kun tiedoston kuvaaja FD on auki ja viittaa päätelaitteeseen.
[-u] Palauttaa arvon true, kun FILE on olemassa ja sen SUID (set user ID) -bitti on asetettu.
[ -sisään ] Palauttaa arvon tosi, kun FILE on olemassa ja kirjoitettavissa.
[-x] Palauttaa arvon tosi, kun FILE on olemassa ja suoritettavissa.
[-O] Palauttaa arvon tosi, kun FILE on olemassa ja se on tehokkaan käyttäjätunnuksen omistuksessa.
[-G] Palauttaa arvon tosi, kun FILE on olemassa ja sen omistaa tehokas ryhmätunnus.
[ -] Palauttaa arvon tosi, kun FILE on olemassa ja on symbolinen linkki.
[-N] Palauttaa arvon tosi, kun FILE on olemassa ja sitä on muutettu sen viimeisen lukemisen jälkeen.
[-S] Palauttaa arvon tosi, kun FILE on olemassa ja on kanta.

THEN-COMMANDS ja ELSE-COMMANDS voivat olla mitä tahansa kelvollisia UNIX-toimintoja tai suoritettavia ohjelmia. Huomaa, että sitten ja olla komennot erotetaan puolipisteellä, koska niiden katsotaan olevan täysin erillisiä komentosarjan osia.



Jos-sitten-muu yksinkertainen esimerkki

Aloitetaan oppitunnimme hyvin yksinkertaisella esimerkillä If-then-Else -lausunnoilla.
Tässä on esimerkkiohjelma:



Jos Esimerkki

Jos Esimerkki

Tässä on tulos, jonka näemme, kun suoritamme komentosarjamme:

$. ifelse1.sh
Arvot ovat samat!
$

Komentoriviargumenttien käyttäminen

Voimme myös käyttää komentoriviargumentteja komentosarjoissamme ja käyttää argumenttien lukumäärää ja arvoja itse ehtenä määrittämässämme IF-käskyssä. Määritämme ensin tekstitiedoston, jonka sisältö on seuraava:



Nimeni on LinuxHint. Rakastan palvelimia, etenkin Ubuntun palvelimia. He ovat niin
terminaalinen!

Nyt voimme kirjoittaa komentosarjan, joka löytää, esiintyykö sana tekstitiedostossa vai ei. Määritellään skripti nyt:

heitti pois '1 dollarin löytäminen $ 2: sta'
pito $ 1 2 dollaria
jos [ $? -syntynyt 0 ]
sitten
heitti pois '$ 1 ei löydy tiedostosta $ 2.'
muu
heitti pois '$ 1 löytyi tiedostosta $ 2.'
olla
heitti pois 'Skripti valmis.'

Tämä käsikirjoitus on erittäin dynaaminen. Se pitää etsittävää sanaa ja tiedostoa haettavana komentoriviltä. Nyt olemme valmiit suorittamaan komentosarjamme:

. ifelse2.sh love hello.txt

Näemme seuraavanlaisen tuloksen:

Rakkauden löytäminensisäänhello.txt
rakkaus löytyisisään tiedostohello.txt.
Skripti valmis.

Tarkistetaan komentoriviargumenttien määrä

IF-lausekkeen sisällä voimme jopa tarkistaa, kuinka monta komentoriviargumenttia komennolle välitettiin, jotta voimme toimia samoin:

Kreivi=$ #
jos [ ! $ määrä -gt 1 ]
sitten
heitti pois 'Ei riitä argumentit'
muu
heitti pois 'Hyvää työtä!'
olla

Suorita tämä skripti nyt, näemme seuraavan tuloksen:

Komentorivin argumentit

Komentorivin argumentit

Jos-sitten-Elif-Else -lausunnot

Meillä voi myös olla useita IF -lausekkeita samassa lohkossa kaventamaan päätöksentekoa, jonka ohjelmamme suorittaa määrittämiemme komentojen suorittamiseen. Tässä on syntaksi useiden IF -lausekkeiden määrittämiseksi skripteissämme:

josTESTIKOMENNOT;
sitten
TULOKOMENNOT;
elif
TOISET KÄSKYT;
sitten
TOISET TULOKOMENNOT;
muu
VAIHTO-KOMENNOT;
olla

Tämä näyttää kuitenkin tutulta ja myös helposti seurattavalta. Määritämme yksinkertaisen esimerkin puun toiminnan määrittämiseksi:

Kreivi=$ #
jos [ $ määrä -ekv 1 ]
sitten
heitti pois 'Vain yksi argumentti löytyi.'
elif [ $ määrä -ekv 2 ]
sitten
heitti pois 'Parempi, kaksi argumenttia löytyi.'
muu
heitti pois 'Hyvää työtä, monia argumentteja löytyi!'
olla

Tässä on mitä saamme takaisin tällä komennolla:

Jos sitten Elif Else esimerkki

Jos sitten Elif Else esimerkki

Koteloiden käyttäminen

IF-ELSE -lausunnot ovat hyödyllisiä, kun sinulla on suuri luettelo vaihtoehdoista, joista sinun on päätettävä. Mutta jos haluat suorittaa toiminnon vain harvoissa tapauksissa, jotka vastaavat tarkasti tulosta, voimme käyttää CASE -lausekkeita myös Bash -skripteissä. Sen syntaksi näyttää tältä:

tapausILMAISUsisäänTAPAUS 1)TOTEUTETTAVAT KÄSKYT;
TAPAUS2)TOTEUTETTAVAT KÄSKYT;
TAPAUS2)TOTEUTETTAVAT KÄSKYT;
...)TOTEUTETTAVAT KÄSKYT;
*)TOTEUTETTAVAT KÄSKYT;
esac

Viimeinen tapaus, jossa on *, toimii oletustapauksena, ja se suoritetaan, kun mitään edellä mainituista tapauksista ei löydy osumasta.

Rakennetaan nopeasti yksinkertainen esimerkki CASE -lausekkeita käyttäen:

tapaus $ 1 sisään
1)
heitti pois 'Arvo on 1.'
;;
2)
heitti pois 'Arvo on 2.'
;;
3)
heitti pois 'Arvo on 3.'
;;
*)
heitti pois 'Muu arvo hyväksytty.'
esac

Jokainen CASE -lauseke päättyy ;; (kaksoispistejä). Tässä on mitä saamme takaisin tällä komennolla:

CASE -esimerkki

CASE -esimerkki

Johtopäätös

Tässä oppitunnissa tarkastelimme, miten voimme käyttää IF-ELSE-, IF-THEN-ELIF- ja CASE-lausekkeita määrittämissämme Bash-skripteissä ryhtyäksemme tiettyihin toimiin ohjelmiemme olemassa olevien tai käyttäjän ohjaamien arvojen perusteella parametrit.