er zijn twee soorten bash voor loops beschikbaar. Een die het “in” trefwoord met lijst van waarden gebruikt, een andere die de C programmering zoals syntaxis gebruiken.
Dit artikel maakt deel uit van onze lopende bash tutorial serie.
Dit verklaart beide bash voor loop methoden, en geeft 12 verschillende voorbeelden over hoe de bash voor loop te gebruiken in je shell scripts.
bladwijzer dit artikel als referentie voor de toekomst, omdat dit het enige artikel is dat je ooit nodig hebt om te refereren over hoe je bash gebruikt voor loops met voorbeelden.,
Methode 1: Bash voor Loop met behulp van” in “en lijst van waarden
Syntax:
for varname in listdo command1 command2 ..done
in de bovenstaande syntaxis:
- for, in, do en done zijn trefwoorden
- ” list ” bevat lijst van waarden. De lijst kan een variabele zijn die meerdere woorden bevat, gescheiden door spaties. Als de lijst ontbreekt in Het for statement, dan neemt het de positionele parameter die in de shell zijn doorgegeven.
- varname is elke Bash variabele naam.
in dit formulier voert Het for-statement de opdrachten uit die in een body zijn ingesloten, eenmaal voor elk item in de lijst., Als de lijst met waarden bijvoorbeeld 5 items bevat, wordt de for-lus in totaal 5 keer uitgevoerd, eenmaal voor elk item in de lijst. Het huidige item uit de lijst wordt opgeslagen in een variabele “varname” elke keer door de lus. Deze “varname” kan worden verwerkt in de body van de for-lus.
Methode 2: Bash For Loop met behulp van C zoals syntaxis
de tweede vorm van de For loop is vergelijkbaar met de For loop in “C” programmeertaal, die drie uitdrukkingen heeft (initialisatie, conditie en updatie).,
for (( expr1; expr2; expr3 ))do command1 command2 ..done
in de bovenstaande bash for command syntaxis,
- voor de eerste iteratie wordt expr1 geëvalueerd. Dit wordt meestal gebruikt om variabelen voor de lus te initialiseren.
- alle statements tussen do en done worden herhaaldelijk uitgevoerd totdat de waarde van expr2 waar is.
- na elke iteratie van de lus wordt expr3 geëvalueerd. Dit wordt meestal gebruikt om een lus teller te verhogen.
de volgende 12 voorbeelden laten zien hoe je loops op verschillende manieren basht.,
statische waarden voor de lijst na ” in ” trefwoord
In het volgende voorbeeld wordt de lijst met waarden (MA, DI, WO, DO en VR) direct gegeven na het trefwoord “in” in de bash for lus.
Let op: de lijst met waarden mag niet worden gescheiden door komma ‘ s (MA, DI, WO, DO, VR). De komma zal worden behandeld als deel van de waarde. dat wil zeggen in plaats van “Mon”, zal het “Mon” gebruiken als waarde zoals getoond in het voorbeeld hieronder.
voorzichtig: de lijst met waarden mag niet worden ingesloten in een dubbel citaat. (“MA DI WO DO VR”)., Als u een dubbele aanhalingsteken omsluit, wordt deze behandeld als een enkele waarde (in plaats van 5 verschillende waarden), zoals in het voorbeeld hieronder.
$ cat for1-wrong2.shi=1for day in "Mon Tue Wed Thu Fri"do echo "Weekday $((i++)) : $day"done$ ./for1-wrong2.shWeekday 1 : Mon Tue Wed Thu Fri
variabele voor de lijst na” in “sleutelwoord
in plaats van de waarden direct in de for-lus op te geven, kunt u de waarden in een variabele opslaan en de variabele in de for-lus gebruiken na het” in ” sleutelwoord, zoals getoond in het volgende voorbeeld.
Let op: als een goede praktijk, moet je altijd de bash variabelen citeren wanneer je het verwijst. Er zijn weinig uitzonderingen op deze regel inzake beste praktijken. Dit is er een van., Als u de variabele in deze dubbele quote voor lus, zal de lijst met waarden worden behandeld als enkele waarde. Veel mensen vallen in deze val. Wees voorzichtig en dubbele quote uw variabele in de for lus.
specificeer de lijst niet; haal het uit de positionele parameters
Als u het trefwoord “in” niet opgeeft gevolgd door een lijst met waarden in de bash for-lus, zal het de positionele parameters gebruiken (dat wil zeggen de argumenten die aan het shell-script worden doorgegeven).
voorzichtig: wees voorzichtig als u deze methode gebruikt. U moet het trefwoord “in” niet opnemen in de for-lus., Als u het trefwoord “in” zonder enige waarden laat, zal het niet de positionele parameter gebruiken zoals hieronder getoond. Het zal niet binnen de lus gaan. dwz voor loop zal nooit worden uitgevoerd zoals in het voorbeeld hieronder.
$ cat for3-wrong.shi=1for day indo echo "Weekday $((i++)) : $day"done$ ./for3-wrong.sh Mon Tue Wed Thu Fri
opmerking: refereer naar ons eerdere artikel om meer te begrijpen over BASH positionele parameters.
Unix commando uitvoer als lijstwaarden na “in” sleutelwoord
u kunt de uitvoer van elk UNIX / Linux commando gebruiken als lijst met waarden voor de for lus door het commando in back-teken ` ` te plaatsen, zoals hieronder getoond.,
lus door bestanden en mappen in een for-lus
om door bestanden en mappen te lusenin een specifieke map, gewoon cd naar die map, en geef * in de for-lus zoals hieronder getoond.
het volgende voorbeeld zal alle bestanden en mappen onder uw persoonlijke map doorlopen.
het gebruik van * in de bash for lus is vergelijkbaar met het globbing van bestanden dat we gebruiken in de linux commandoregel wanneer we het ls commando (en andere commando ‘ s) gebruiken.
bijvoorbeeld, het volgende zal alle bestanden en mappen onder uw persoonlijke map weergeven., Dit is het concept dat wordt gebruikt in de bovenstaande for5.sh voorbeeld.
cd ~ls *
het volgende geeft alle *weer.conf bestand dat begint met a, b, of, c of d Onder / etc directory.
$ ls -1 /etc/*.conf/etc/asound.conf/etc/autofs_ldap_auth.conf/etc/cas.conf/etc/cgconfig.conf/etc/cgrules.conf/etc/dracut.conf
hetzelfde argument dat wordt gebruikt in het ls commando hierboven, kan worden gebruikt in een bash for loop, zoals getoond in het voorbeeld hieronder.
breken uit De for-lus
u kunt uit Een for-lus breken met het commando’ breken’, zoals hieronder wordt getoond.,
$ cat for6.shi=1for day in Mon Tue Wed Thu Frido echo "Weekday $((i++)) : $day" if ; then break; fidone$ ./for6.shWeekday 1 : MonWeekday 2 : Tue
doorgaan vanaf de bovenkant van de for-lus
onder bepaalde voorwaarden kunt u de rest van de commando ‘ s in de for-lus negeren, en de lus vanaf de bovenkant weer voortzetten (voor de volgende waarde in de lijst), met behulp van de opdracht doorgaan zoals hieronder getoond.
het volgende voorbeeld voegt “(WEEKEND)” toe aan Za en zon, en “(weekday)” aan de rest van de dagen.
Bash voor loop met behulp van C programma syntaxis
dit voorbeeld gebruikt de tweede methode van bash voor loop, die vergelijkbaar is met de C Voor loop syntaxis., Het volgende voorbeeld genereert 5 willekeurig getal met behulp van de bash C-stijl voor loop.
9. Infinite Bash voor loop
wanneer je de start, conditie en toename niet opgeeft in de bash C-stijl voor loop, zal het oneindige loop worden. U moet op Ctrl-C drukken om de lus te stoppen.
$ cat for9.shi=1;for (( ; ; ))do sleep $i echo "Number: $((i++))"done
zoals we hierboven al zeiden, druk op Ctrl-C om uit dit bash infinite for loop voorbeeld te breken.,
$ ./for9.shNumber: 1Number: 2Number: 3
met behulp van een komma in de bash C-stijl voor lus
In de bash C-stijl lus, kunt u naast het verhogen van de waarde die wordt gebruikt in de voorwaarde, ook een andere waarde verhogen zoals hieronder getoond.
In de initialize sectie, en de increment sectie van de bash C-stijl voor lus, kunt u meerdere waarden hebben door te scheiden met een komma zoals hieronder getoond.
het volgende voor lus wordt in totaal 5 keer uitgevoerd, met behulp van de variabele i. de variabele j begint echter met 5, en krijgt elke keer dat de lus wordt uitgevoerd een toename met 5.,
$ cat for10.shfor ((i=1, j=10; i <= 5 ; i++, j=j+5))do echo "Number $i: $j"done$ ./for10.shNumber 1: 10Number 2: 15Number 3: 20Number 4: 25Number 5: 30
bereik van getallen na” in “trefwoord
u kunt doorlopen met behulp van het bereik van getallen in de for-lus” in ” met behulp van brace-uitbreiding.
het volgende voorbeeld loopt 10 keer door met de waarden 1 tot en met 10.
$ cat for11.shfor num in {1..10}do echo "Number: $num"done$ ./for11.shNumber: 1Number: 2Number: 3Number: 4Number: 5...
bereik van getallen met stappen na” in ” trefwoord
het volgende voorbeeld loopt door 5 keer met behulp van de waarden 1 tot en met 10, met een toename van 2. dat wil zeggen dat het begint met 1, en blijft verhogen met 2, totdat het 10 bereikt.,
$ cat for12.shfor num in {1..10..2}do echo "Number: $num"done$ ./for12.shNumber: 1Number: 3Number: 5Number: 7Number: 9
PS: vergeet niet om dit artikel als bladwijzer te gebruiken voor uw toekomstige referentie.
als je dit artikel leuk vond, vind je het misschien ook leuk..
|
|