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:
Tässä on tulos, jonka näemme, kun suoritamme komentosarjamme:
$. ifelse1.shArvot 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.txtNäemme seuraavanlaisen tuloksen:
Rakkauden löytäminensisäänhello.txtrakkaus 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:
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:
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ään1)
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:
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.