Kaikki mitä sinun tarvitsee tietää Bash For Loopsista Linuxissa

Kaikki mitä sinun tarvitsee tietää Bash For Loopsista Linuxissa

Bash -skriptit ovat erittäin tehokas tapa automatisoida tehtäviä, erityisesti niitä, jotka hyödyntävät muita olemassa olevia ohjelmia. Tämä automaatio vaatii usein samankaltaisen toimenpiteen toistamista useita kertoja, juuri siinä silmukkaa varten tulee omakseen.





Linux- ja Mac -järjestelmänvalvojat tuntevat yleensä komentosarjat päätelaitteen kautta, mutta jopa Windows -käyttäjät voivat ryhdy toimiin Windowsin Linux -alijärjestelmän kanssa .





Bash -skriptien toiminta

Bash -komentosarja on yksinkertainen tekstitiedosto, joka sisältää sarjan komentoja, joita bash -kuori voi lukea ja suorittaa. Bash on Catalinaa edeltävän macOS: n ja useimpien Linux-jakelujen oletuskuori.





Jos et ole koskaan työskennellyt shell -komentosarjan kanssa, sinun pitäisi aloittaa ehdottomasti yksinkertaisimmasta tapauksesta. Tämän avulla voit harjoitella keskeisiä käsitteitä, kuten komentosarjan luomista ja sen suorittamista.

Luo ensin seuraava tiedosto kätevään paikkaan (mieluiten avaa päätelaite ja siirry ensin haluttuun hakemistoon):



#!/bin/bash
echo 'Hello, World'

Ensimmäisellä rivillä kerrotaan, mitä ohjelmaa suoritetaan (kuten bash -tulkin avulla). Toinen on vain komento, kuten mikä tahansa muu, jonka voit kirjoittaa komentoriville. Tallenna tiedosto nimellä hello_world.sh , sitten:

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

The chmod komento ensimmäisellä rivillä tekee tiedostosta suoritettavan, eli se voidaan suorittaa kirjoittamalla sen nimi, kuten toisella rivillä.





Jos näet sanat Hei, maailma näkyy tulostettuna rivillä päätelaitteessasi, kaikki toimii niin kuin pitää.

Kuinka silmukat toimivat

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





Silmukoiden numerointi keskittyy yleensä yhteen kokonaislukuun, joka määrittää kuinka monta iterointia suoritetaan, esimerkiksi:

for (i = 0; i <100; i++) {
/* statements to execute repeatedly */
}

Tämä on tutun näköinen silmukka, joka iteroituu täsmälleen 100 kertaa, ellei silmukan sisällä muuta, tai jos jokin muu lause aiheuttaa for-silmukan suorittamisen.

Sitä vastoin Foreach -silmukat toimivat yleensä rakenteilla, kuten luetteloilla tai matriiseilla, ja toistuvat jokaiselle kokoelman kohteelle:

people = [ 'Peter', 'Paul', 'Mary' ]
foreach (people as person) {
if (person == 'Paul') {
...
}
}

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

people = [ 'Peter', 'Paul', 'Mary' ]
for (person in people) {
if (person == 'Paul') {
...
}
}

For Loops

Bashissa saarnaaminen - tai sisään - silmukka on yleisempi. Perussyntaksi on yksinkertaisesti:

for arg in [list]
do
/* statements to execute repeatedly */
/* the value of arg can be obtained using $arg */
done

Voit esimerkiksi toistaa kolme nimenomaisesti nimettyä tiedostoa:

mitä dm tarkoittaa sosiaalisessa mediassa
for file in one.c two.c three.c
do
ls '$file'
done

Jos tällaisia ​​tiedostoja on nykyisessä hakemistossa, tämän komentosarjan tulostus on:

one.c
two.c
three.c

Kiinteän tiedostojoukon sijaan luettelo voidaan saada globaalin 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':

for file in *.xml
do
ls -l '$file'
done

Tässä muutama esimerkkituotos:

$ -rw-r--r-- 1 bobby staff 2436 3 Nov 2019 feed.xml
$ -rw-r--r-- 1 bobby staff 6447 27 Oct 16:24 sitemap.xml

Tämä saattaa näyttää pitkälle menevältä tapalta:

$ ls -l *.xml

Mutta siinä on merkittävä ero: for -silmukka suorittaa ls ohjelmaa 2 erillistä kertaa, ja yksi tiedostonimi välitetään sille joka kerta. Erillisessä ls-esimerkissä globaali kuvio (*.xml) vastaa ensin tiedostonimiä ja lähettää sitten ne kaikki yksittäisinä komentoriviparametreina yhteen esiintymään ls .

Tässä on esimerkki, joka käyttää WC (sanamäärä) -ohjelma eron selventämiseksi:

$ wc -l *.xml
44 feed.xml
231 sitemap.xml
275 total

The WC ohjelma laskee rivien määrän kussakin tiedostossa erikseen ja tulostaa sitten niiden kaikkien kokonaismäärän. Sitä vastoin, jos WC toimii for -silmukan sisällä:

for file in *.xml
do
wc -l $file
done

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

44 feed.xml
231 sitemap.xml

Mutta yleistä yhteenvetoa ei ole, koska WC suoritetaan erikseen, aina kun silmukka iteroituu.

Kun luettelo ei ole luettelo

Silmukoiden käsittelyssä on erittäin helppo ja yleinen virhe, koska bash käsittelee lainattuja argumentteja/merkkijonoja. Tiedostojen selaaminen tulisi tehdä seuraavasti:

for file in one.c two.c

Ei näin:

for file in 'one.c two.c'

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

FILES='one.c two.c'
for file in $FILES
do
...
done

Huomaa, että muuttujan ilmoituksen on itse sisällytettävä sen arvo lainausmerkkeihin!

mistä tietää, jos joku on estänyt sinut snapchatissa

Ilman luetteloa

Koska mitään toistettavaa ei ole, for-silmukka toimii mitä tahansa komentorivin argumentteja, jotka annettiin komentosarjalle kutsuttaessa. Jos sinulla on esimerkiksi skripti nimeltä args.sh joka sisältää seuraavat:

#!/bin/sh
for a
do
echo $a
done

Sitten suorittamalla args.sh saat seuraavan:

$ ./args.sh one two three
one
two
three

Bash tunnistaa tämän tapauksen ja kohtelee tekemään vastineena $@ do jossa $@ on erityinen muuttuja, joka edustaa komentoriviargumentteja.

Perinteisen numeron jäljitteleminen silmukalle

Bash -komentosarjat käsittelevät usein tiedostojen luetteloita tai muiden komentojen tulostusrivejä, joten for -in -tyyppinen silmukka on yleinen. Perinteistä c-tyylistä toimintoa tuetaan kuitenkin edelleen:

for (( i=1; i<=5; i++ ))
do
echo $i
done

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

  1. muuttuja alustetaan (i = 1), kun silmukka havaitaan ensimmäisen kerran
  2. silmukka jatkuu niin kauan kuin ehto (ts<=5) is true
  3. joka kerta silmukan ympäri muuttuja kasvaa (i ++)

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

for i in {1..5}
do
echo $i
done

Kiinnikkeiden laajennus, joka tapahtuu tehokkaasti, kääntää yllä olevan silmukan seuraavasti:

for i in 1 2 3 4

Hienompi silmukkaohjaus tauko ja jatka

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

#!/bin/bash
for file in *
do
if [ ! -f '$file' ]
then
echo '$file is not a file'
continue
fi
num_chars=$(wc -c <'$file')
echo $file is '$num_chars characters long'
if [ $num_chars -gt 100 ]
then
echo 'Found $file'
break
fi
done

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

Johtopäätös

Bash -skripti on tiedosto, joka sisältää joukon ohjeita, jotka voidaan suorittaa. For -silmukka sallii osan komentosarjasta toistuvan monta kertaa. Muuttujien, ulkoisten komentojen ja tauko- ja jatkolausekkeiden avulla bash -komentosarjat voivat soveltaa monimutkaisempaa logiikkaa ja suorittaa monenlaisia ​​tehtäviä.

Jaa Jaa Tweet Sähköposti Kannattaako päivittää Windows 11: een?

Windows on suunniteltu uudelleen. Mutta riittääkö se vakuuttamaan sinut siirtymään Windows 10: stä Windows 11: een?

Lue seuraava
Liittyvät aiheet
  • Ohjelmointi
  • Linux
Kirjailijasta Bobby Jack(58 artikkelia julkaistu)

Bobby on teknologian harrastaja, joka työskenteli ohjelmistokehittäjänä lähes kaksi vuosikymmentä. Hän on intohimoinen pelaamisesta, työskentelee Switch Editor Magazine -lehden arvostelutoimittajana ja on upotettu kaikkeen verkkojulkaisemiseen ja -kehitykseen.

Lisää Bobby Jackilta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi