Shellprogrammierung, Schleifen
Hallo Liste, bei meinen Scriptprogrammierveruchen bin ich gerade über ein Problem gestolpert, das eigentlich ganz einfach zu lösen sein sollte, aber ich komm' einfach nicht drauf. Ich benötige eine Schleifenkonstruktion, die n mal durchlaufen wird, also sowas wie damals in Basic mit einer "hochzählenden for-Schleife" gelöst wurde. Wie mach ich sowas in der shell? -- Viele Grüße vom Bodensee, Ralf Steck - Die Textwerkstatt mailto:rsteck@die-textwerkstatt.de http://www.die-textwerkstatt.de Privat: http://www.ralfsteck.de vcard: http://www.die-textwerkstatt.de/RalfSteck.vcf --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Ralf Steck schrieb am 05.Jul.2000:
bei meinen Scriptprogrammierveruchen bin ich gerade über ein Problem gestolpert, das eigentlich ganz einfach zu lösen sein sollte, aber ich komm' einfach nicht drauf. Ich benötige eine Schleifenkonstruktion, die n mal durchlaufen wird, also sowas wie damals in Basic mit einer "hochzählenden for-Schleife" gelöst wurde. Wie mach ich sowas in der shell?
i=0 while [ $i -le 10 ] do # Innerhalb der Schleife i=`expr $i + 1` done Zählt von 0 bis 10. Nach der Schleife steht $i auf 11. PS: Das ist Original Bourne-Shell. In der bash kannst Du die vorletzte Zeile etwas eleganter gestalten: i=$(($i+1)) Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Bernd Brodesser wrote:
i=0 while [ $i -le 10 ] do # Innerhalb der Schleife
i=`expr $i + 1` done
oder: let i+=1 Wenn die Variable vorher als integer deklariert wird, wird's noch einfacher: declare -i i=0 oder local -i i ... i=i+1 ... Andere Schleifen-Moeglichkeiten: for i in `seq 0 10`; do ...; done ==> for (( i=0; i<10; i++ )); do ...; done ==> i=0; while (( i++<10 )); do ...; done i=0; while (( (i=i+1) <10 )); do ...; done i=0; while (( (i+=1) < 10 )); do ...; done i=0; while i=i+1; ((i<10)); do ...; done ==> i=0; while (( i++ < 10 )); do ...; done und ... Die mit ==> gekennzeichneten funktionieren nur mit bash 2.04+ i++ < 10 ueberprueft erst und inkrementiert anschliessend ++i < 10 inkrementiert erst und testet danach. ((i+=1)) entspricht let i+=1 oder let i=i+1 oder i=$(($i+1)) oder i=$i+1 oder i=i+1 Die letzte Moeglichkeit funktioniert nur, wenn i als integer deklariert wurde. Wenn nicht, enthaelt i hinterher 'i+1' Henning -- H. Henning Vossieck http://hhv.de [currently inactive] SuSE Linux 6.4 Kernel 2.4.0-test3-267 glibc 2.1.3 egcs 2.95.2 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Henning wrote:
... oder i=$i+1 oder i=i+1
Die letzte Moeglichkeit funktioniert nur, wenn i als integer
Musste heissen: Die letzten _zwei_ Moeglichkeiten ... -- H. Henning Vossieck http://hhv.de [currently inactive] SuSE Linux 6.4 Kernel 2.4.0-test3-267 glibc 2.1.3 egcs 2.95.2 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Mit, Jul 05, 2000 at 03:56:51 +0200, Ralf Steck wrote:
bei meinen Scriptprogrammierveruchen bin ich gerade über ein Problem gestolpert, das eigentlich ganz einfach zu lösen sein sollte, aber ich komm' einfach nicht drauf. Ich benötige eine Schleifenkonstruktion, die n mal durchlaufen wird, also sowas wie damals in Basic mit einer "hochzählenden for-Schleife" gelöst wurde. Wie mach ich sowas in der shell?
for i in 1 2 3 4 5 6 7 8 9 10; do <Befehle> done for i in `seq 1 10`; do <Befehle> done Bernds while-Schleife i=0 while true; do <Befehle> i=`expr $i + 1` test $i -ge 10 && break done und so weiter und so fort man bash Jan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (4)
-
B.Brodesser@online-club.de
-
hhv@hhv.de
-
Jan.Trippler@t-online.de
-
rsteck@die-textwerkstatt.de