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.