Hoe't jo in BASH skriuwe "foar" Loop

Hoe brûk de BASH "foar" yn skelleskrippen

BASH (dat foar Bourne Again Shell stiet) is in scripting-taal dy't brûkt wurdt troch de measte Linux- en UNIX-basearre bestjoeringssystemen.

Jo kinne boaden befetsje binnen in terminalfinster ien nei de oare of kinne jo de kommando's taheakje oan in teksttriem om in shell-skript te meitsjen.

It geweldige ding oer it skriuwen fan shellskripten is dat jo se altyd wer útfiere kinne. Bygelyks foarbylden moatte jo in brûker oanmeitsje oan in systeem, sette har tagongsrjochten en beheine har startomjouwing. Jo kinne de kommando's op in stikje papier skriuwe en wurde as jo nije brûkers oanmeitsje of jo kinne inkele skript skriuwe en pasparreare passe yn dat skript.

Skript-talen lykas BASH hawwe lykwols programmearde konstruksjes lykas oare talen. Jo kinne bygelyks ymportparameters brûke om de ynfier te foegjen fan it toetseboerd en bewarje se as farianten. Jo kinne dan it skript krije om in bepaalde aksje út te fieren basearre op de wearde fan de ynputparameters .

In kaai foar elke programmearring en scripting taal is de mooglikheid om itselde stikje koade wer en kear wer út te fieren.

Der binne in oantal manieren om code te werheljen (ek wol loops neamd). Yn dit gids kinne jo sjen hoe't jo in "foar" loop skriuwe.

A foar loop skriuwt in beskate sekere fan 'e koade oer en oer. Se binne brûkber om in rige kommando's te hâlden, oant in bepaalde steat foldien is, wêrnei't se stopje.

Yn dit guod wurdt jo fjouwer wizen sjen litte om it foar loop yn in BASH-skript te brûken.

Foardat jo begjinne

Foardat jo begjinne mei de foar loopbehearder, moatte jo in terminalfinster iepenje en folgje dizze stappen:

  1. Enter mkdir scripts ( lês mear oer mkdir hjir )
  2. Cd-skripts ynfiere (dit feroaret de map foar skripts )
  3. Gean nei nano examplen.sh (wêr n is it foarbyld wêr't jo wurkje op)
  4. Fier it skript yn
  5. Druk CTRL + O om te bewarjen en CTRL + X om út te gean
  6. Run bash examplen.sh (wer, mei n as it foarbyld dat jo wurkje mei)

Hoe kinne jo troch in list trochleare

#! / bin / bash
foar nûmer yn 1 2 3 4 5
dwaan
echo $ nûmer
dien
útgong 0

De BASH-manier foar gebrûk fan "foar" loops is wat oars oan 'e wei fan' e measte oare programmearring en skripte-talen 'handling' foar loops. Lit it skript ombrekke ...

Yn in BASH "foar" alle rûnen, wurde de ferklearring tusken do en docht ien kear foar elke item yn 'e list útfierd.

Yn it boppeneamde foarbyld is de list alles wat komt nei it wurd (1 2 3 4 5).

Elke kear as de loop iteret, wurdt de folgjende wearde yn de list ynfierd yn 'e fariabele neffens it wurd "foar" . Yn 'e boppeste loop wurdt de fariant nûmer neamd.

De echo- ferklearring wurdt brûkt om ynformaasje te sjen op it skerm.

Dêrom nimt dit foarbyld de nûmers 1 oant 5 en jout se ien nei ien nei it skerm:

Hoe kinne jo tusken in start en einpunt slute

De problemen mei it boppeneamde foarbyld is dat as jo in gruttere list ferwurkje wolle (sizze 1 oant 500), it soe âlder wurde om alle nûmers op it earste plak te typen.

Dit bringt ús nei it twadde foarbyld dat sjen litte hoe in start- en einpunt oan te jaan:

#! / bin / bash
foar nûmer yn {1..10}
dwaan
echo "$ nûmer"
dien
útgong 0

De regels binne itselde. De wearden nei it wurd " yn" meitsje de list om te iten te meitsjen en elke wearde yn 'e list wurdt yn' e fariabele (dûbele nûmer) pleatst, en elke kear de loop iteret, wurde de ferklearring tusken do en dien .

It wichtichste ferskil is de manier wêrop de list foarme is. De curly brackets {} fynt yn essinsje in berik, en it berik, yn dit gefal, is 1 oant 10 (de twa punten skiede de start en ein fan in berik ôf).

Dit foarbyld rint dan troch elke nûmer tusken 1 en 10 en jout it nûmer op it skerm as resultaat:

Dezelfde loop koe dit skreaun hawwe, mei syntaksis identike oan it earste foarbyld:

foar nûmer yn 1 2 3 4 5 6 7 8 9 10

Hoe kinne skûlnammen yn in rige skûlje

It foarige foarbyld hat as toetsen tusken in begjin en einpunt, sadat we sjogge hoe't de nûmers yn it berik skipfine kinne.

Undersyk jo dat jo tusken 0 en 100 wikselje wolle, mar allinich alle tsien nûmers sjen. It folgjende skript lit sjen hoe't jo dit dwaan:

#! / bin / bash
foar nûmer yn {0..100..10}
dwaan
echo "$ nûmer"
dien
útgong 0

De regels binne itselde. Der is in list, in fariant, en in set fan ferklearrings dy't dien wurde tusken do en dien . De list hat dizze tiid sa: {0..100..10}.

It earste nûmer is 0 en it nûmer is 100. It tredde nûmer (10) is it oantal items yn 'e list dy't it skip sil.

It boppeste foarbyld lit dan de neikommende output sjen:

In mear tradysjonele sykjen nei loop

De BASH-manier foar skriuwen foar loops is wat frjemd as yn fergeliking mei oare programmingtalen.

Jo kinne lykwols in rol foar in loop skriuwe yn in identike styl nei de C programming taal, lykas dit:

#! / bin / bash
foar ((nûmer = 1; nûmer <100; nûmer ++))
{
as (($ nûmer% 5 == 0))
dan
echo "$ nûmer is dielber foar 5"
fi
}
útgong 0

De loop begjint troch it variable-nûmer op 1 (getal = 1 ) te setten. De loop sil itertearje, wylst de wearde fan in getal minder dan 100 is ( nûmer <100 ). De wearde fan nûmerwizigingen wurdt troch 1 tafoege nei elk iteraasje ( nûmer ++ ).

Alles tusken de heule spuitingen wurdt troch elk ytearaasje fan 'e loop útfierd.

It bit tusken de spoaren kontrolet de wearde fan in getal , divies it troch 5, en ferpartearret de reste oan 0. As de reste is 0 is it nûmer dield troch 5 en wurdt dan werjûn op it skerm.

Bygelyks:

As jo ​​de stappengrutte fan 'e iteraasje wizigje wolle, kinne jo it nûmer ++-paragraf it nûmer = nûmer + 2 , nûmer = nûmer + 5 of nûmer = nûmer + 10, asw.

Dit kin fierder ferminderje nei nûmer + = 2 of nûmer + = 5 .

In praktysk foarbyld

Foar loops kinne mear dwaan as iterate listen fan nûmers. Jo kinne de útfier fan oare kommando's brûke as list.

It folgjende foarbyld lit sjen hoe't jo audio-bestannen fan MP3 nei WAV konvertearje:

#! / bin / bash

De list yn dit foarbyld is elke triem mei de extension fan de .MP3 yn de aktive map en de fariabele is in triem .

It kommando mpg ferwiist de MP3-bestân yn WAV. Jo moatte it wierskynlik lykwols earst ynstalleare mei jo pakketbehearder earst.