Bash-komentosarjat ovat erittäin tehokas tapa automatisoida tehtäviä, etenkin niitä, jotka hyödyntävät muita olemassa olevia ohjelmia. Tämä automaatio vaatii usein samanlaisen toiminnan toistamista useita kertoja, juuri siinä silmukalle tulee omiin.

Linux- ja Mac-järjestelmänvalvojat tuntevat tyypillisesti pääkäyttäjän komentosarjat, mutta jopa Windows-käyttäjät voivat päästä mukaan toimintaan Windows-alijärjestelmällä Linuxille.

Kuinka saada Linux Bash Shell Windows 10: een

Täytyykö sinun käyttää Linuxia ilman aikaa siirtyä toiseen tietokoneeseen tai suorittaa virtuaalikone? Suorita Linux Windows 10: ssä Bash-komentoterminaalilla!

Kuinka Bash-komentosarjat toimivat

Bash-komentosarja on yksinkertaisesti pelkkä tekstitiedosto, joka sisältää sarjan komentoja, jotka bash-kuori voi lukea ja suorittaa. Bash on oletuskuori pre-Catalina macOS -käyttöjärjestelmässä ja useimmissa Linux-jakeluissa.

Jos et ole koskaan aiemmin työskennellyt komentotulkkikomennon kanssa, sinun on aloitettava ehdoton yksinkertaisin tapa. Tämän avulla voit harjoitella keskeisiä käsitteitä, mukaan lukien komentosarjan luominen ja suorittaminen.

instagram viewer

Luo ensin seuraava tiedosto sopivaan paikkaan (mieluiten avaa pääte ja siirry ensin haluamaasi hakemistoon):

#! / bin / bash
kaiku "Hei, maailma"

Ensimmäinen rivi kertoo mitä tahansa tämän ohjelman ajajaa miten se suoritetaan (ts. Käyttäen bash-tulkkia). Toinen on vain komento, kuten mikä tahansa muu komentoriville kirjoittamasi komento. Tallenna tiedosto nimellä hello_world.sh, sitten:

$ chmod + x hei_maailma.sh
$ ./hello_world.sh

chmod Ensimmäisen rivin komento tekee tiedostosta suoritettavan, mikä tarkoittaa, että se voidaan suorittaa kirjoittamalla sen nimi, kuten toisella rivillä.

Jos näet sanan "Hei, maailma", painettuna terminaalisi riville, kaikki toimii tarpeen mukaan.

Kuinka silmukat toimivat

Yleisessä ohjelmoinnissa silmukalle on kaksi päätyyppiä: numeerinen ja jokaiselle. Numerotyyppi on perinteisesti yleisin, mutta bash-käytössä se on yleensä päinvastoin.

Silmukoiden numerointi keskittyy tyypillisesti yhteen kokonaislukuun, joka määrittää kuinka monta iteraatiota suoritetaan, esimerkiksi:

(i = 0; i <100; i ++) {
/ * käskyt suoritettavaksi toistuvasti * /
}

Tämä on tutun näköinen silmukka, joka toistuu täsmälleen 100 kertaa, ellei minua muuteta silmukassa tai jokin muu käsky saa for-silmukan suorituksen pysähtymään.

Foreach-silmukoilla on sitä vastoin taipumus toimia rakenteilla, kuten luetteloilla tai matriiseilla, ja toistaa jokaisen kyseisen kokoelman kohteen:

ihmiset = ["Pietari", "Paavali", "Mary"]
foreach (ihmiset henkilöinä) {
jos (henkilö == "Paavali") {
...
}
}

Jotkut kielet käyttävät hieman erilaista syntaksia, joka vaihtaa kokoelman ja kohteen järjestyksen:

ihmiset = ["Pietari", "Paavali", "Mary"]
(henkilö ihmisissä) {
jos (henkilö == "Paavali") {
...
}
}

Sillä silmukoissa

Bashissa foreach - tai sisään- huopa on yleisempää. Perussyntaksi on yksinkertaisesti:

argille [luettelossa]
tehdä
/ * käskyt suoritettavaksi toistuvasti * /
/ * argin arvo saadaan käyttämällä $ arg * /
tehty

Esimerkiksi iteroida kolmen nimenomaisen tiedoston kautta:

tiedostolle yksi.c kaksi. c kolme. c
tehdä
ls "$ tiedosto"
tehty

Jos tällaisia ​​tiedostoja on nykyisessä hakemistossa, tämän komentosarjan lähtö on:

yksi. c
kaksi. c
kolme. c

Kiinteän tiedostojoukon sijasta luettelo voidaan hankkia glob-kuvion avulla (yksi sisältää jokerimerkit - erikoismerkit, jotka edustavat muita merkkejä). Seuraavassa esimerkissä for silmukka toistaa kaikki tiedostot (nykyisessä hakemistossa), joiden nimet päättyvät ".xml":

tiedostolle * .xml
tehdä
ls -l "$ tiedosto"
tehty

Tässä on esimerkki tuotoksesta:

$ -rw-r - r-- 1 bobby staff 2436 3. marraskuuta 2019 feed.xml
$ -rw-r - r-- 1 bobbihenkilöstö 6447 27. lokakuuta 16:24 sitemap.xml

Tämä voi näyttää pitkälti tapa toimia:

$ ls -l * .xml

Mutta siinä on merkittävä ero: for-silmukka suorittaa Ls ohjelmoi 2 erillistä kertaa, yhdellä tiedostonimellä joka kerta. Erillisessä ls-esimerkissä glob-kuvio (* .xml) vastaa ensin tiedostonimiä ja lähettää sitten ne kaikki yksittäisinä komentoriviparametreina yhdelle Ls.

Tässä on esimerkki, joka käyttää WC (sanamäärä) -ohjelma, jotta ero olisi selvempi:

$ wc -l * .xml
44 feed.xml
231 sivustokartta.xml
275 yhteensä

WC Ohjelma laskee kunkin tiedoston rivien lukumäärän erikseen ja tulostaa sitten niiden kokonaislukumäärän. Sitä vastoin, jos WC toimii silmukan sisällä:

tiedostolle * .xml
tehdä
wc -l $ -tiedosto
tehty

Näet edelleen kunkin tiedoston määrän:

44 feed.xml
231 sivustokartta.xml

Mutta ei ole yleistä yhteenvetoa, koska WC suoritetaan erillään joka kerta, kun silmukka toistaa.

Kun luettelo ei ole luettelo

Silmukoiden käsittelyssä on erittäin helppo ja yleinen virhe johtuen tavasta, jolla bash käsittelee lainattuja argumentteja / merkkijonoja. Tiedostoluettelon selaaminen tulee tapahtua seuraavasti:

tiedostolle yksi. c. kaksi. c

Ei näin:

tiedostolle "one.c two.c"

Toinen esimerkki sulkee tiedostonimet lainausmerkkeihin, mikä johtaa luetteloon, jossa on vain yksi parametri; for -silmukka suorittaa vain yhden kerran. Tämä ongelma voidaan välttää käyttämällä muuttujaa tällaisissa tapauksissa:

FILES = "yksi.c kaksi. C"
tiedostolle tiedostossa $ FILES
tehdä
...
tehty

Huomaa, että muuttuja-ilmoituksen on itse liitettävä arvo lainausmerkkeihin!

Sillä ilman luetteloa

Koska mitään ei tarvitse toistaa, for-silmukka toimii kaikilla komentoriviargumenteilla, jotka skriptille annettiin, kun niitä kutsuttiin. Jos sinulla on esimerkiksi nimetty komentosarja args.sh joka sisältää seuraavat:

#! / bin / sh
a
tehdä
kaiku $ a
tehty

Sitten args.sh: n suorittaminen antaa sinulle seuraavan:

$ ./args.sh yksi kaksi kolme
yksi
kaksi
kolme

Bash tunnistaa tämän tapauksen ja kohtelee tekemistä varten vastaavana hintaan $ @ do jossa $ @ on erityinen muuttuja, joka edustaa komentoriviargumentteja.

Perinteisen numeerisen matkiminen silmukalle

Bash-komentosarjat käsittelevät usein tiedostojen luetteloita tai muiden komentojen lähtö riviä, joten for in -silmukan tyyppi on yleinen. Perinteistä c-tyylistä toimintaa tuetaan kuitenkin edelleen:

((i = 1; i <= 5; i ++))
tehdä
kaiku $ i
tehty

Tämä on klassinen muoto, jossa on kolme osaa:

  1. muuttuja alustetaan (i = 1), kun silmukka kohdataan ensimmäisen kerran
  2. silmukka jatkuu niin kauan kuin ehto (i <= 5) on totta
  3. joka kerta silmukan ympäri muuttujaa lisätään (i ++)

Kahden arvon välinen iterointi on riittävän yleinen vaatimus, että on olemassa lyhyempi, hieman vähemmän sekava vaihtoehto:

i: lle kohdassa {1..5}
tehdä
kaiku $ i
tehty

Tapahtumassa oleva aaltosulkeuma muuntaa yllä olevan silmukan tehokkaasti seuraavasti:

i: lle 1 2 3 4

Hienosäätöinen silmukan hallinta taukolla ja jatka

Monimutkaisempi silmukoille edellyttää usein tapaa poistua aikaisin tai käynnistää pääsilmukka välittömästi uudelleen seuraavalla arvolla vuorotellen. Tätä varten bash lainaa tauon ja jatkaa lauseita, jotka ovat yleisiä muilla ohjelmointikielillä. Tässä on esimerkki, joka käyttää molempia ensimmäisen, yli 100 merkin pituisen tiedoston löytämiseen:

#! / bin / bash
tiedostolle *
tehdä
jos [! -f "$ tiedosto"]
sitten
echo "$ tiedosto ei ole tiedosto"
jatkaa
fi
num_chars = $ (wc -c echo $ -tiedosto on "$ num_chars merkkiä pitkä"
jos [$ num_chars -gt 100]
sitten
kaiku "Löytyi $ tiedosto"
tauko
fi
tehty

Tässä oleva for -silmukka toimii kaikissa nykyisen hakemiston tiedostoissa. Jos tiedosto ei ole tavallinen tiedosto (esim. Jos se on hakemisto), jatko-käskyä käytetään käynnistämään silmukka uudelleen seuraavan tiedoston kanssa vuorotellen. Jos kyseessä on tavallinen tiedosto, toinen ehdollinen lohko määrittää, sisältääkö siinä yli 100 merkkiä. Jos näin on, break-käskyä käytetään poistumaan for-silmukasta välittömästi (ja saavuttamaan komentosarjan loppu).

Johtopäätös

Bash-komentosarja on tiedosto, joka sisältää joukon suoritettavia ohjeita. A for -silmukka sallii komentosarjan osan toistamisen monta kertaa. Muuttujien, ulkoisten komentojen sekä tauko- ja jatko-lauseiden avulla bash-komentosarjat voivat soveltaa monimutkaisempaa logiikkaa ja suorittaa monenlaisia ​​tehtäviä.

Sähköposti
Applen sovellusten tietosuojatarrat eivät välttämättä ole täysin tarkkoja

Raportin mukaan Applen sovellusten tietosuojamerkinnöissä voi olla joitain ongelmia.

Liittyvät aiheet
  • Ohjelmointi
  • Linux
Kirjailijasta
Bobby Jack (19 artikkelia julkaistu)

Bobby on tekniikan harrastaja, joka työskenteli ohjelmistokehittäjänä kahden vuosikymmenen ajan. Hän on intohimoinen pelaamisesta, työskentelee Switch Editor -lehden arvostelujen toimittajana ja on upotettu verkkojulkaisuun ja verkkokehitykseen.

Lisää artistilta Bobby Jack

Tilaa uutiskirjeemme

Liity uutiskirjeeseemme, jossa on teknisiä vinkkejä, arvosteluja, ilmaisia ​​e-kirjoja ja erikoistarjouksia!

Vielä yksi askel !!!

Vahvista sähköpostiosoitteesi juuri lähettämässäsi sähköpostissa.

.