Bash 'For' loop: õpetus ja näited

Bash (Bourne Again Shell) on GNU/Linuxi operatsioonisüsteemide shell-käsuviip ja skriptikeel. See on enamiku Linuxi distributsioonide vaikekest.

Nagu enamik skriptikeeli, pakub Bash tsüklisüntaksi, et korrata sarnaseid ülesandeid mitu korda. Selles artiklis õpime, kuidas kasutada jaoks silmus Bashis.

Sissejuhatus

Tüüpiline Bashi skript sisaldab rida käske, mida täidetakse üksteise järel. Muutujaid saab kasutada stringide, täisarvude indeksi väärtuste, käsu tulemuste jms salvestamiseks. Silmused on vajalikud, kui kasutaja soovib teatud käsku mitu korda täita. See on eriti kasulik, kui ühe käsu väljund on loendi kujul ja iga loendi tulemuse puhul tuleb käivitada teine ​​​​käsk.

Üldine süntaks

Üldine süntaks jaoks jaoks tsükkel Bashis on:

for in do ... ... tehtud

Siin, on Bashi muutuja, mis peab olema kehtiv Linuxi shellmuutuja nimi, st nimi sisaldab tähtede (az, AZ), numbrite (0-9) ja alakriipsu ( _ ) kombinatsiooni ning see peab algama kas tähega või alakriips.

The on kas kohandatud täisarvuindeksite vahemik, mida silmustatakse, või kohandatud täisarvude või stringide loend. See võib sisaldada ka mõnda teist Linuxi käsku, kuid sellise käsu väljund peab olema eraldatud tühikute või reavahetusmärkidega, st Bashi poolt loetellu sõelutav (Bashi loend on põhimõtteliselt tühiku või reavahetusega eraldatud väärtuste kogum ).

Ükskõik millist käsku(d) täidetakse, tuleb see asetada teha..tehtud blokk.

Vaatame mõnda lihtsat näidet.

Täisarvude väärtuste vahemiku silmus: Järgmine kood loob kataloogid nimega dir1, dir2, dir3 kuni dir10.

for i in {1..10} do mkdir dir$i done

Püsiväärtuste loendi silmus: Järgmine kood prindib iga stringi või täisarvu antud fikseeritud loendis.

minu jaoks Tere 1 2 3 Hüvasti! tee kaja $i tehtud

Käsu väljundis silmus: Järgmine kood loob ahela väljundi ls ja prindib iga faili nime antud vormingus.

for i in `ls` do echo "Failinimi on $i" tehtud

Väljendil põhinev süntaks

Bashis on võimalik ka C-programmeerimiskeelega sarnane väljendipõhine süntaks:

for ((Avaldis 1; Avaldis 2; Avaldis 3)) do ... ... tehtud

siin, Väljend 1 on indeksi muutuja(te) initsialiseerimine. Väljend 2 on tingimus, mil tsüklist tuleb väljuda; seda tingimust kontrollitakse igas iteratsioonis. Väljend 3 määrab indeksi muutuja(te) väärtuse suurendamise/vähendamise/muutmise

Järgmine näide prindib lihtsalt väärtused vahemikus 0 kuni 4:

for ((i=0;i<5;i++)) do echo $i tehtud

Järgmine näide loob lõpmatu tsükli, kuna avaldisi pole määratud:

jaoks (( ; ; )) do echo "Vajutage Ctrl-C peatamiseks" tehtud

Katkesta ja jätka

Katkestusavaldus tingimuslikuks väljumiseks

Võime kasutada ka tingimuslauset kui silmuse sees. The kui lauset saab kasutada koos a murda lause tingimuslikuks tsüklist väljumiseks.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else kaja $i; tehtud

Ülaltoodud tsükkel prindib numbrid vahemikus 0 kuni 4. Kui i väärtus on 5, läheb see tsüklist välja. See on eriti kasulik siis, kui tsüklist tuleb väljuda, kui käsk annab konkreetse väljundi. Näiteks järgnev tsükkel katkeb, kui ja kui see leiab tühja faili.

faili puhul `ls` do flen=`wc -c $fail` if [[ "$flen" = "0 $fail" ]] siis kaja "$fail on tühi" break else echo $flen fi tehtud 

Käsk wc -c prindib faili ridade arvu . See prindib selle vormingus , näiteks, 10 test.txt. Me murrame tsüklist välja, kui ridade arv on 0, st tühi fail.

Jätkake avaldusega, et iteratsioon tingimuslikult vahele jätta

Sarnaselt C-le ja paljudele teistele programmeerimiskeeltele on bashil ka a jätka lause, et tsükli iteratsiooni ülejäänud osa vahele jätta, kui konkreetne tingimus on täidetud.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]], siis jätka fi echo $i; tehtud

Ülaltoodud silmus prindib numbrid vahemikus 0 kuni 10, välja arvatud 5, kuna iteratsiooni ajal i=5 seal on käsk Jätka, mis jätab iteratsiooni alguses tsükli ülejäänud koodi vahele i=6.

Järgmises näites prindime faili ridade arvu ja seda teeb konkreetne iteratsioon jätka kui see on kataloog, mitte fail.

ls-i faili puhul tee if [[ -d $fail ]] siis jätka fi wc -c "$fail" tehtud

[[ -d $fail ]] kontrollib, kas fail on kataloog. Kui see on nii, siis liigume järgmise faili, st järgmise iteratsiooni juurde. Kui see pole kataloog, prindime faili ridade arvu kasutades tualett käsk, nagu ka varem näidatud.

Silmuste kasutamine: skriptid ja käsurida

Silmuse süntaksit saab kasutada Bash shellis otse või kestaskriptifailist. Ükskord jaoks tsükli süntaks sisestatakse kestale, jätkab kest viipa, et lubada kasutajal jätkata silmuskäskude andmist.

Muidu saab kasutaja selle skriptifaili salvestada ja skriptifaili käivitada.

The #!/bin/bash alguses määrab tõlgi, mida faili käivitamisel kasutatakse. Kuigi Bash on tänapäeval kõige sagedamini kasutatav kest, eelistavad mõned kasutajad selliseid kestasid nagu zsh, mis tuleks selle faili alguses määrata bashi asemel.

Käivitusõiguste andmiseks selle faili jaoks käivitage:

chmod +x test.sh

Lõpuks faili käivitamiseks, jookse:

./test.sh

Järeldus

The jaoks tsükkel Bashis on üsna lihtne funktsioon, kuid seda saab kasutada peaaegu igat tüüpi keerukate skriptimisstsenaariumide puhul. Selle õppimine läheb kaugele, olenemata sellest, kas olete tavaline või edasijõudnud Linuxi kasutaja või hakkate õppima automatiseerimist süsteemihalduse ja DevOpsi ülesannete jaoks.