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.