Ofta vill man att ett kommando ska utföras flera gånger beroende på vissa villkor. Bash erbjuder några olika möjligheter till sådana upprepningar. Ett alternativ är for, vars syntax ser ut så här:
(Man får som vanligt använda semikolon i stället för radbrytning.) För varje argument i argumentlista antar variabeln variabel detta argument som värde under det att kommando utförs. Här är ett exempel:$ for i in esike desike luntan tuntanforvariabelinargumentlista
dokommando
done
> do echo "Nu har 'i' värdet $i"
> done
Nu har 'i' värdet esike
Nu har 'i' värdet desike
Nu har 'i' värdet luntan
Nu har 'i' värdet tuntan
Vill man att variabel ska genomlöpa en
följd av tal, så kan man låta
seq generera talföljden.
Instruktionen seq 5 skriver ut talen från 1 till 5,
separerade av nyrad-tecken:$ seq 5
1
2
3
4
5
$ Men hjälp av flaggan -s kan man ange en annan separator:$ seq -s '+' 5
1+2+3+4+5
$ Följden behöver inte börja på 1:$ seq -s ' ' 3 12
3 4 5 6 7 8 9 10 11 12
$ Så här genereras vart sjunde tal mellan 2 och 50:$ seq -s ',' 2 7 50
2,9,16,23,30,37,44
$ Vi använder nu seq i en for-sats:$ ls
Kapitel40A/ bellman lenngren
$ for i in $(seq 4) ; do cp bellman epistel$i.text ; done
$ ls
Kapitel40A/ epistel1.text epistel3.text lenngren
bellman epistel2.text epistel4.text
$Filen bellman kopierades till fyra nya filer.
Innan for-satsen utfördes skrevs
$(seq 4) om till talen från 1 till 4,
se avsnitt 6.5.
(Skalet åt upp de nyrad-tecken som genererades av seq,
se
.)
När man använder
for-satser i Bash-program vill man ofta
att variabeln ska genomlöpa varje argument
programmet anropades med.
Om ''in text'' utelämnas, så
sker just detta.
Vi ger nu ett program som kopierar var och en av
de filer man anger som argument.
#!/bin/bash for FIL do cp $FIL $FIL.kopia done
Vi antar att programmet heter kopiera.$ kopiera epistel[3-5].text
$ ls
Kapitel40A/ epistel2.text epistel4.text
bellman epistel3.text epistel4.text.kopia
epistel1.text epistel3.text.kopia lenngren
$ Ovan har vi använt jokertecken för att matcha två
filnamn, som blir argument till programmet
kopiera. I programmet genomlöper variabeln
FIL de båda filnamnen.
Lägg märke till att det är Bash som tar hand om jokertecknen,
vårt program har ingen aning om deras existens!
Ett annat sätt att upprepa kommandon är while-satsen. Dess syntax är
Först körs testkommando. Om det lyckades, så körs kommando och därefter upprepas det hela. Om testkommando misslyckas, dvs om dess slutstatus är skild från 0, så körs inte kommando utan programmet fortsätter efter done.whiletestkommando
dokommando
done
En variant av while är until. Dess syntax är
Här körs först testkommando. Om det misslyckas, så körs kommando och det hela upprepas. Om testkommando lyckas, så avslutas until och programmet fortsätter efter done.untiltestkommando
dokommando
done