Welcome to Our Website

Bash Scripting Tutorial-5. If lausumat

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

  1. #!/bin/bash
  2. # Perus, jos selvitys
  3. jos
  4. sitten
  5. echo Hei, se\’s suuri määrä.,
  6. pwd
  7. fi
  8. 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.
  1. ./if_example.sh 15
  2. Pe 5 Feb 9:06:30 2021
  3. ./if_example.sh 150
  4. Hei, se on suuri määrä.
  5. /home/ryan/bin
  6. 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.
  1. test 001 = 1
  2. echo $?
  3. 1
  4. test 001 -eq 1
  5. echo $?,
  6. 0
  7. kosketa myfile
  8. testi -s myfile
  9. echo $?
  10. 1
  11. onko /etc > myfile
  12. testi -s myfile
  13. echo $?
  14. 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

  1. #!/bin/bash
  2. # else esimerkki
  3. jos
  4. sitten
  5. nl $1
  6. muuta
  7. nl /dev/stdin
  8. 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

  1. #!,/bin/bash
  2. # ja esimerkki
  3. jos &&
  4. sitten
  5. echo Tämä tiedosto on hyödyllinen.
  6. fi

Ehkä haluaisimme tehdä jotain hieman erilaista, jos käyttäjä on joko rop-tai andy.

or.sh

  1. #!/bin/bash
  2. # tai esimerkiksi
  3. jos ||
  4. sitten
  5. ls-alh
  6. muuta
  7. onko
  8. 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

  1. #!,/bin/bash
  2. # case esimerkki
  3. case $1
  4. aloita)
  5. echo alkaen
  6. ;;
  7. lopeta)
  8. echo stoping
  9. ;;
  10. käynnistä uudelleen)
  11. echo uudelleenkäynnistyksen
  12. ;;
  13. *)
  14. echo don\’t tiedä,
  15. ;;
  16. 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.
  1. ./case.sh alkaa
  2. alkaen
  3. .,/case.sh käynnistä uudelleen
  4. uudelleenkäynnistyksen
  5. ./case.sh blaa
  6. tiedä

Nyt katsotaanpa hieman monimutkaisempi esimerkki, jossa kuvioita käytetään hieman enemmän.

Yhteenveto

jos suorittaa joukon komentoja, jos testi on totta. jos testi ei ole totta, suorita eri komentoja. elif jos edellinen testi palasi väärä sitten kokeilla tätä. && Suorita ja käyttö. / / Suorita leikkaussali. case Valitse joukko komentoja suorittaa riippuen merkkijono vastaa tietyn kuvion.,
Sisentäminen helpottaa koodin lukemista. Se saa on yhä tärkeämpää kuin Bash skriptejä saada pidempi. Suunnittelu Nyt, että skriptit ovat vähän monimutkaisempia haluat ehkä viettää hieman aikaa miettiä, miten voit jäsentää niitä ennen sukellusta.

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.).

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *