If lausumat!
päätökset, päätökset.
Johdanto
Bash, jos lausunnot ovat erittäin hyödyllisiä. Tässä osassa meidän Bash Scripting opetusohjelma opit tapoja voit käyttää, jos lausuntoja bash skriptejä auttaa automatisoimaan tehtäviä.
Jos lausunnot (ja läheistä sukua, jos tilinpäätös) antaa meille mahdollisuuden tehdä päätöksiä meidän Bash skriptejä. Niiden avulla voimme päättää, käytämmekö koodinpätkää asettamiemme ehtojen mukaan., Jos lausunnot, yhdistettynä silmukoita (jota tarkastelemme seuraavassa osassa) voimme tehdä paljon monimutkaisempia skriptejä, jotka voivat ratkaista suurempia tehtäviä.
Kuten mitä olemme tutkineet aiemmissa osissa, niiden syntaksi on hyvin erityinen, joten pysy päälle kaikki pienet yksityiskohdat.
Perus, Jos Lausunnot
perus, jos lausunto tehokkaasti kertoo, jos tietty testi on totta, niin suorittaa tietty joukko toimia. Jos se ei ole totta, Älä suorita niitä toimia., Jos seuraa kaavaa:
sitten
<komennot>
fi
välillä Jotain, sitten ja fi (jos taaksepäin) suoritetaan vain, jos testi (välillä hakasulkeissa) on totta.
katsotaanpa yksinkertainen esimerkki:
if_example.sh
- #!/bin/bash
- # Perus, jos selvitys
- jos
- sitten
- echo Hei, se\’s suuri määrä.,
- pwd
- fi
- päivämäärä
katsotaanpa murtaa se alas:
- Rivin 4 – katsotaan, jos ensimmäinen komento argumentti on suurempi kuin 100
- Rivi 6 ja 7 – saa ajaa, jos testi linjalla 4 palauttaa true. Täällä voi olla niin monta komentoa kuin haluaa.
- Line 6 – kenoviiva ( \ ) eteen heittomerkki ( ’ ) on tarpeen, sillä yksittäinen lainaus on erityinen merkitys bash ja emme halua, että erityinen merkitys. Takaisku karkaa erikoiselta merkitykseltä, jotta se olisi taas normaali tavallinen yksittäinen sitaatti.,
- linja 8 – fi viestittää if-lausuman lopun. Kaikki komennot tämän jälkeen ajetaan normaalisti.
- Linja 10 -, Koska tämä komento on ulkopuolella, jos selvitys tulee toimimaan riippumatta tulos, jos lausunto.
- ./if_example.sh 15
- Pe 5 Feb 9:06:30 2021
- ./if_example.sh 150
- Hei, se on suuri määrä.
- /home/ryan/bin
- Pe 5 Feb 9:06:30 2021
Se on aina hyvä käytäntö testata skriptejä tulo, joka kattaa eri skenaarioita, jotka ovat mahdollisia.,
Testi
neliön suluissa ( ) jos lause edellä ovat itse asiassa viittaus komento testi. Tämä tarkoittaa, että kaikkia testin mahdollistavia toimijoita voidaan käyttää myös täällä. Katso man-sivua testattavaksi nähdäksesi kaikki mahdolliset operaattorit (niitä on melko vähän), mutta osa yleisemmistä on lueteltu alla.
– Operaattori | Kuvaus |
---|---|
! Lauseke | lauseke on väärä. |
-n STRING | merkkijonon pituus on suurempi kuin nolla., |
-Z STRING | merkkijonon pituus on nolla (Eli se on tyhjä). |
MJONO1 = MERKKIJONO2 | MERKKIJONO1 on yhtä MERKKIJONO2 |
MERKKIJONO1 != MERKKIJONO2 | MERKKIJONO1 ei ole yhtä MERKKIJONO2 |
KOKONAISLUKU1 … – eq INTEGER2 | KOKONAISLUKU1 … on numeerisesti yhtä suuri INTEGER2 |
KOKONAISLUKU1 … – gt INTEGER2 | KOKONAISLUKU1 … on lukumääräisesti suurempi kuin INTEGER2 |
KOKONAISLUKU1 … – lt INTEGER2 | KOKONAISLUKU1 … on numeerisesti vähemmän kuin INTEGER2 |
-d – | TIEDOSTO on olemassa ja hakemisto., |
-E-tiedosto | tiedosto on olemassa. |
-r TIEDOSTO | TIEDOSTO on olemassa ja lukea lupa on myönnetty. |
-s-tiedosto | tiedosto on olemassa ja sen koko on suurempi kuin nolla (ts. se ei ole tyhjä). |
-w-TIEDOSTO | TIEDOSTO olemassa ja kirjoitusoikeudet myönnetään. |
-x – | TIEDOSTO on olemassa ja suorittaa lupa on myönnetty. |
muutamia huomioitavia seikkoja:
- = on hieman erilainen -ekv. palauttaa false as = tekee merkkijono vertailu (eli., merkki merkki merkki merkki sama) kun taas-taajuuskorjain tekee numeerinen vertailu merkitys Palaa totta.
- kun viittaamme yllä olevaan tiedostoon, merkitsemme todellisuudessa polkua. Muista, että polku voi olla absoluuttinen tai suhteellinen ja voi viitata tiedostoon tai hakemistoon.
- Koska on vain viittaus komento testi voi kokeilla ja ongelmia ampua testi komentoriviltä varmista, että ymmärrystä sen toiminta on oikea.
- test 001 = 1
- echo $?
- 1
- test 001 -eq 1
- echo $?,
- 0
- kosketa myfile
- testi -s myfile
- echo $?
- 1
- onko /etc > myfile
- testi -s myfile
- echo $?
- 0
katsotaanpa murtaa se alas:
- Rivi 1 – Suorittaa merkkijono perustuva vertailu. Testi ei tulosta, joten sen sijaan tarkistamme sen poistumistilanteen, mitä teemme seuraavalla rivillä.
- linja 2-muuttuja $? pitää hallussaan aiemmin suoritetun komennon poistumistilannetta (tässä tapauksessa testi). 0 tarkoittaa totta (tai menestystä). 1 = väärä (tai epäonnistuminen).,
- linja 4 – tällä kertaa teemme numeerisen vertailun.
- linja 7 – Luo uusi tyhjä tiedosto myfile (olettaen, että myfile ei ole jo olemassa).
- linja 8 – onko myfileen koko suurempi kuin nolla?
- linja 11 – ohjaa jotain sisältöä myfile-muotoon, joten sen koko on suurempi kuin nolla.
- linja 12 – testaa jälleen myfilen kokoa. Tällä kertaa se on totta.
Sisennys
huomaat, että jos lausunnon edellä on sisennetty komentoja, jotka olivat ajaa, jos väite oli totta., Tätä kutsutaan sisennys ja on tärkeä osa hyvää, puhdasta koodia (millä tahansa kielellä, ei vain Bash skriptejä). Tavoitteena on parantaa luettavuutta ja vaikeuttaa yksinkertaisten, hölmöjen virheiden tekemistä. Ei ole mitään sääntöjä, jotka koskevat sisällytetään bash joten voit luetelmakohta tai ei luetelmakohta miten haluat ja skriptit edelleen ajaa täsmälleen sama. Suosittelen, että luetelmakohta koodin kuitenkin (varsinkin kun skriptit saada suurempi) muuten se on yhä vaikea nähdä rakenteen skriptejä.,
sisennetty If lausekkeet
sisennyksestä puhuminen. Tässä on täydellinen esimerkki siitä, milloin se helpottaa elämää sinulle. Sinulla voi olla niin monta, jos lausunnot kuin on tarpeen sisällä käsikirjoituksen. On myös mahdollista saada Ifin lausunto toisen Ifin lausuman sisällä. Esimerkiksi, saatamme haluta analysoida numero annetaan komentorivillä, kuten niin:
katsotaanpa murtaa se alas:
- Rivin 4 – Suorittaa seuraavat, vain jos ensimmäinen komento argumentti on suurempi kuin 100.
- linja 8 – Tämä on if-lausekkeen kevyt muunnelma., Jos haluamme tarkistaa lausekkeen, Voimme käyttää kaksoissulkeita aivan kuten teimme muuttujille.
- linja 10 – Saa ajaa vain, jos molemmat lausunnot pitävät paikkansa.
Yo dawg I herd pidät, jos lausunnot, joten en laita, jos ilmoitus sisällä, jos lausunto.
Xzibit
(Xzibit ei oikeastaan sanoa, että mutta olen varma, että hän olisi, jos hän isännöi Pimp My Bash-Skripti.,)
Voit pesä niin monta, jos lausuntoja kuin haluat, mutta yleisenä nyrkkisääntönä, jos haluat pesä enemmän kuin 3 tasoa syvä, sinun pitäisi luultavasti ajatella on järjestää uudelleen logiikkaa.
Jos Muualla
Joskus haluat suorittaa tietty joukko toimia, jos lausuma on totta, ja toinen joukko toimia, jos se on väärä. Voimme ottaa tämän huomioon else-mekanismilla.,
sitten
<komennot>
muu
<muut komennot>
fi
Nyt voimme helposti lukea tiedosto, jos se toimitetaan komentoriviltä argumentti, muuta lukea STDIN.
else.sh
- #!/bin/bash
- # else esimerkki
- jos
- sitten
- nl $1
- muuta
- nl /dev/stdin
- fi
Jos Elif Muualla
Joskus meillä voi olla useita ehtoja, jotka voivat johtaa erilaisia polkuja.,
sitten
<komennot>
if
sitten
<eri komennot>
muu
<muut komennot>
fi
se saattaa esimerkiksi olla niin, että jos olet 18 tai yli voit mennä juhliin. Jos et ole, mutta sinulla on kirje vanhemmiltasi, voit mennä, mutta sinun on palattava ennen puoltayötä. Muuten et voi lähteä.
Sinulla voi olla niin monta elif oksat kuin haluat. Myös lopullinen muu on valinnainen.,
Boolean Operations
joskus haluamme tehdä jotain vain, jos useat ehdot täyttyvät. Toisina aikoina haluaisimme suorittaa toimintaa, jos yksi useista ehdoista täyttyy. Voimme majoittaa nämä Boolen toimijoiden kanssa.
- – ja – &&
- tai ||
esimerkiksi ehkä me vain haluamme suorittaa operaation, jos tiedosto on luettavissa ja on kooltaan suurempi kuin nolla.
and.sh
- #!,/bin/bash
- # ja esimerkki
- jos &&
- sitten
- echo Tämä tiedosto on hyödyllinen.
- fi
Ehkä haluaisimme tehdä jotain hieman erilaista, jos käyttäjä on joko rop-tai andy.
or.sh
- #!/bin/bash
- # tai esimerkiksi
- jos ||
- sitten
- ls-alh
- muuta
- onko
- fi
Jos Lausunnot
Joskus saatamme haluta ottaa eri polkuja perustuu muuttujan matching sarjan malleja., Me voisimme tarvita joukon if: n ja elifin lausuntoja, mutta se kasvaisi pian epäystävälliseksi. Onneksi on olemassa asialausunto, joka voi tehdä asioista puhtaampia., It’s a little hard to explain so here are some examples to illustrate:
case <variable> in
<pattern 1>)
<commands>
;;
<pattern 2>)
<other commands>
;;
esac
Here is a basic example:
case.sh
- #!,/bin/bash
- # case esimerkki
- case $1
- aloita)
- echo alkaen
- ;;
- lopeta)
- echo stoping
- ;;
- käynnistä uudelleen)
- echo uudelleenkäynnistyksen
- ;;
- *)
- echo don\’t tiedä,
- ;;
- esac
katsotaanpa murtaa se alas:
- Rivin 4 – Tämä linja alkaa casemechanism.
- linja 5 – Jos $1 on yhtä suuri kuin ”start”, suorita seuraavat toimet. ) merkitsee kuvion loppua.,
- linja 7-tunnistamme tämän lausekkeiden joukon lopun kaksoispisteellä (;;). Tämän jälkeen on seuraava tapaus harkittavana.
- linja 14 – muista, että testi jokaiselle tapaukselle on kuvio. * Edustaa minkä tahansa merkin määrää. Se on essentialy saalis kaikki Jos Jos mikään muista tapauksista vastaavat. Se ei ole tarpeen, mutta sitä käytetään usein.
- Linja 17 – esac on kyseessä taaksepäin ja osoittaa, että olemme lopussa case-selvitys. Muut lausunnot tämän jälkeen suoritetaan normaalisti.
- ./case.sh alkaa
- alkaen
- .,/case.sh käynnistä uudelleen
- uudelleenkäynnistyksen
- ./case.sh blaa
- tiedä
Nyt katsotaanpa hieman monimutkaisempi esimerkki, jossa kuvioita käytetään hieman enemmän.
Yhteenveto
toiminta
nyt tehdään joitakin päätöksiä.
- luo bash-skripti, joka ottaa komentorivin argumenteiksi 2 numeroa. Se tulostaa näytölle suuremman kahdesta numerosta.,
- luo Bash-skripti, joka hyväksyy tiedoston komentoriviargumenttina ja analysoi sitä tietyillä tavoilla. esim. voit tarkistaa, onko tiedosto suoritettava vai kirjoitettava. Sinun pitäisi tulostaa tietty viesti, jos totta ja toinen, jos väärä.
- luo Bash-skripti, joka tulostaa viestin, joka perustuu mihin viikonpäivään se on (esim. ”Happy hump day” Wedensdaylle, ”TGIF” perjantaille jne.).