ubuntuusers.de

Eine Schleife eine gewisse Anzahl mal wiederholen lassen

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

KarstenW.

Avatar von KarstenW.

Anmeldungsdatum:
27. Juni 2011

Beiträge: 208

Hallo,

stehe gerade vor einem Rätsel und weiß nicht weiter. Für ein Script brauche ich eine Schleife die ich eine gewisse Anzahl mal wiederholen lassen kann. Die Anzahl der Wiederholungen soll durch eine Variable übergeben werden. Also per Variable sage ich der Schleife bitte so und so oft ausführen und dann stop.

Vielleicht kann mir jemand weiterhelfen.

Gruß Karsten

Maggot

Avatar von Maggot

Anmeldungsdatum:
9. September 2011

Beiträge: 82

Wohnort: Wien

In der Shell würde es folgendermaßen gehen:

1
2
3
4
5
6
7
8
#!/bin/bash

x = 1
while x <= DEINERANZAHLDERDURCHGÄNGE
do
   #deine befehle
   i = i + 1
done

tobi81

Anmeldungsdatum:
9. Juni 2010

Beiträge: 234

Wohnort: 127.0.0.1

Das macht man eigentlich nicht mit "while", sondern mit "for", also

1
2
3
for ((i=1 ; i<=ANZAHL ; i++ )); do 
  ANWEISUNGEN
done

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

tobi81 schrieb:

Das macht man eigentlich nicht mit "while", sondern mit "for"

Das zum einen und zum anderen sind bei Maggot leider einige Fehler drin:

  • Um die Gleichheitszeichen bei Zuweisungen dürfen keine Leerzeichen stehen.

  • Der while-Schleifenkopf wird so ohne runde Klammern nicht funktionieren.

  • (Detail: Der deutsche Umlaut im Variablennamen geht in die Hose.)

  • Im Schleifenrumpf wird i statt x verändert, aber …

  • … auch das Inkrementieren wird ohne entsprechende Kennzeichnung nicht funktionieren.

Also, wenn while-Schleife, dann so:

1
2
3
4
5
6
7
8
9
#!/bin/bash

anzahl=5
x=1
while (( x <= anzahl ))
do
   # ... Deine Befehle ...
   x=$((x + 1))
done

Aber mit for ist’s ohnehin besser.

underliner

Anmeldungsdatum:
11. März 2007

Beiträge: 1

Wohnort: Verden, Lower Saxony, GER

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Vain schrieb:

Also, wenn while-Schleife, dann so:
...

Bei while willst Du doch vergleichen und nicht rechnen ...?
Dafür würde ich eher eckige Klammern [ ... ] nehmen und für den numerischen Vergleich -le:

while [ $x -le $anzahl ] ; do

so wie im Bash Manual unter Conditional Expressions beschrieben.

Ansonsten ist der Vorschlag von tobi81 mit for natürlich eleganter, weil er die 3 Schritte Initialisierung, Abfrage und hochzählen in 1 Befehl zusammenzieht.

LG,

track

KarstenW.

(Themenstarter)
Avatar von KarstenW.

Anmeldungsdatum:
27. Juni 2011

Beiträge: 208

Ich danke euch für eure Mühe, mit der Lösung von Tobi81 hat es super geklappt.

Gruß Karsten

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

1
for x in $(seq 1 $n) ; do echo foo; done 
Antworten |