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

Silmuse „while” kasutamine Bashi skriptimisel käsu(de) kordamiseks.

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ükli süntaksi, et korrata sarnast ülesannet mitu korda. Selles artiklis õpime, kuidas kasutada samas silmus Bashis.

Sissejuhatus

The samas tsüklit Bashis kasutatakse käsu(de) (käidatud käskude) mitmekordseks täitmiseks teise käsu(te) väljundi alusel (tingimuskäsud). Täidetud käsud töötavad seni, kuni tingimuskäsk töötab edukalt (st tagastab oleku 0. Iga Linuxi käsk tagastab õnnestumise korral 0 ja ebaõnnestumise korral nullist erineva täisarvu).

Kui tingimuskäske on mitu, arvestab avaldus ainult loendi viimase käsu olekut, st tsükkel käivitatakse kuni loendi viimase käsu eduka täitmiseni.

Üldine süntaks

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

samas teha

Käsukäskude täitmisloend töötab seni, kuni tingimuskäskude loendi viimane käsk edukalt käivitub ja väljub olekuga 0. Kui viimane tingimuskäsk ebaõnnestub, siis iteratsioonis tsükkel väljub.

Kasutaja saab käsuloendites määrata mis tahes käivitatava faili. Need võivad olla tavalised Linuxi programmid või kohandatud kasutajaprogrammid või skriptid. Iga käsk peab olema kas uuel real või eraldatud semikooloniga samal real.

Vaatame mõnda näidet.

Pööramine seni, kuni muutujal on konkreetne väärtus: Järgmine tsükkel käivitatakse kuni muutuja väärtuseni x ei ole võrdne 10-ga.

x=0, samas kui [[ $x -ne 10 ]] kordab $x ((x++)) tehtud

Igas iteratsioonis kontrollime, kas x väärtus on 10. Väärtust kontrollitakse, kasutades katsetada käsk. [[ Väljend ]] on testkäsu süntaks (vt mehe test). Siin, kuna me kasutame - ei operaator (mis tähistab 'mitte võrdne'), tagastab testkäsk 0, st edu, kui x väärtus ei ole 10, ja tagastab nullist erineva väärtuse, st ebaõnnestumise, kui x väärtus on 10.

Siis sees teha...tehtud plokk, trükime x väärtuse ja suurendame seda. Kui x väärtus on 10, tagastab testkäsk nullist erineva oleku ja tsükkel väljub.

Märge: Indeksi muutuja, mida kasutatakse while-tsüklis, tuleb lähtestada kas enne while-tsüklit või tingimuskäskudes, mitte for loop, mis võimaldab muutujat kaudselt initsialiseerida.

Mitme tingimuse käsuga: Järgmine tsükkel loob 5 nimega kataloogi dir0, dir1, ... dir4.

z=0, samas kui kaja "Failide loend:" ls -l [[ $z -ne 5 ]] teeb kaja "Dir$z loomine..." mkdir dir$z ((z++)) on tehtud

Esimesed käsud echo "Failide loend:" ja ls -l täidetakse üks kord täielikult; nende edu või ebaõnnestumine ei mõjuta tsükli kestust.

Seejärel käivitatakse muutuja z väärtuse kontrollimise testkäsk. Kuni z väärtus ei ole 5, tagastab testkäsk eduoleku ja seega tsükkel jätkab töötamist. Tingimuskäsud ja täidetavad käsud töötavad järjest. Siin käivitab see iga iteratsiooni puhul esmalt käsu echo ja käsu ls in condition ning seejärel kontrollib 3. tingimuse käsk z väärtust. Kui see pole 5, siseneb see tsüklisse ja täidab etteantud käsud.

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.

x=0, samas kui [[ $x -ne 10 ]] teha, kui [[ $x -eq 5 ]] break fi echo $x ((x++)) tehtud

Ülaltoodud while 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.

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

Bashil on ka a jätka lause, et tsükli iteratsiooni ülejäänud osa vahele jätta, kui konkreetne tingimus on täidetud.

x=0 samas kui [[ $x -ne 10 ]] tee, kui [[ $x -eq 5 ]] jätka fi echo $x ((x++)) tehtud

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

Silmuste kasutamine: skriptid ja käsurida

Silmusüntakseid saab kasutada Bashi kestas otse või käivitatavast shelliskriptifailist. Sarnane jaoks ja samas silmuseid, kord an samas 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 samas silmus, sarnane jaoks ja kuni tsüklid on Bashi skriptimise oluline funktsioon. Kuigi tsüklil on sarnane kasutusala kui kuni tsüklil, välja arvatud see, et seda kasutatakse alternatiivsete käskude/programmide käivitamiseks, kui konkreetne programm õnnestub. See on sageli kasulik täiustatud võrguskriptides, süsteemi hooldusskriptides jne.