Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

For mit Schleifenzähler

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
bunter fisch
Member
Member
Beiträge: 65
Registriert: 12. Sep 2017, 10:25

For mit Schleifenzähler

Beitrag von bunter fisch » 15. Mär 2018, 16:36

Hallo,

ich bin durch Zufall hier http://openbook.rheinwerk-verlag.de/she ... 2B1F04E1AB auf For-Schleifen mit Zähler gestoßenund wollte das mal probieren. Leider sind die Bsp. etwas kryptisch. Angenommen ich möchte eine For-Schleife x mal durchlaufen lassen und dabei jeweils eine Datei mit einer Nummer erstellen lassen, die beide jedem Durchlauf um 1 erhöht wird.

Code: Alles auswählen

#!/bin/bash
DATE=`date '+%Y-%m-%d-%H:%M:%S'`
for((i=5; i>0 ;i++))
 do
  touch neu-$DATE
  sleep 1
 done
Ich habe jetzt hier statt einem Zähler ein Datum mit Uhrzeit einsetzen lassen, da ich nicht weiß, was ich anstelle von 'DATE' einfügen muss um dort einen Zähler zu haben. Aber auch so geht das Script so nicht. Ich dachte es werden 5 Dateien mit unterschiedlichen Uhrzeiten erstellt (daher sleep, damit es keine doppelten Namen gibt), es wird aber nur eine erstellt und das Script wird im Terminal nicht beendet. Irgendwie bleibt es im 1. Durchlaufen hängen.

Werbung:
abgdf
Guru
Guru
Beiträge: 3096
Registriert: 13. Apr 2004, 21:15

Re: For mit Schleifenzähler

Beitrag von abgdf » 15. Mär 2018, 16:48

Bevor Du irgendwas in die Schleife schreibst, teste sie erstmal mit print, bzw. echo:

Code: Alles auswählen

#!/bin/bash

for((i=1; i<=5; i++))
do
    echo $i
done
Die Syntax stammt von C. Das erste ist der Anfangswert; das zweite die Bedingung, solange die Schleife läuft; das dritte, was bei jedem Durchlauf mit der Variable passieren soll.
Vielleicht interessiert Dich meine Seite.

marce
Advanced Hacker
Advanced Hacker
Beiträge: 1055
Registriert: 19. Jun 2008, 13:16
Wohnort: Dettenhausen
Kontaktdaten:

Re: For mit Schleifenzähler

Beitrag von marce » 15. Mär 2018, 17:26

abgesehen davon: Du definierst / belegst / weißt einen Wert zu DATE vor der Schleife - und gibst den in der Schleife dann aus. Mehrfach. Den Wert, den Du vorher festgelegt hast.

... woher soll den DATE in der Schleife einen neuen Wert bekommen?

abgdf
Guru
Guru
Beiträge: 3096
Registriert: 13. Apr 2004, 21:15

Re: For mit Schleifenzähler

Beitrag von abgdf » 15. Mär 2018, 20:30

Aber grundsätzlich bist Du natürlich ein zu Lobender, daß Du Dich mit diesen Fragen beschäftigen möchtest. ;)

Benutzeravatar
Geier0815
Administrator
Administrator
Beiträge: 4274
Registriert: 14. Jun 2004, 09:12

Re: For mit Schleifenzähler

Beitrag von Geier0815 » 15. Mär 2018, 22:42

Ganz ehrlich: Mit der Anleitung (das openbook) hätte ich es auch nicht verstanden. Wenn dich das Thema shell-skripte interessiert kann ich dir das Buch "Shell Skript Programmierung" aus dem mitp-Verlag empfehlen. Wenn es etwas günstiger sein soll, such eine gebrauchte Ausgabe (4.Auflage).
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?

MH1962
Member
Member
Beiträge: 92
Registriert: 10. Aug 2015, 16:42

Re: For mit Schleifenzähler

Beitrag von MH1962 » 16. Mär 2018, 04:38

bunter fisch hat geschrieben:
15. Mär 2018, 16:36

Code: Alles auswählen

#!/bin/bash
DATE=`date '+%Y-%m-%d-%H:%M:%S'`
for((i=5; i>0 ;i++))
 do
  touch neu-$DATE
  sleep 1
 done
Ich habe jetzt hier statt einem Zähler ein Datum mit Uhrzeit einsetzen lassen, da ich nicht weiß, was ich anstelle von 'DATE' einfügen muss um dort einen Zähler zu haben. Aber auch so geht das Script so nicht. Ich dachte es werden 5 Dateien mit unterschiedlichen Uhrzeiten erstellt (daher sleep, damit es keine doppelten Namen gibt), es wird aber nur eine erstellt und das Script wird im Terminal nicht beendet. Irgendwie bleibt es im 1. Durchlaufen hängen.
Nö. Du hast eine Endlos-Schleife produziert. Das Script läuft solange i>0 ist, und nach jedem Durchlauf wird i um eins erhöht, bleibt also größer als Null.

Du wolltest i-- schreiben...

Und Datei wird nur eine erstellt - und das unendlich oft - weil die Variable ja nicht in der Schleife geändert wird.

Tipp noch am Rande:

Code: Alles auswählen

sh -x ./test.sh
Damit werden alle durchlaufenen Zeilen des Scriptes ausgegeben.

uhelp
Member
Member
Beiträge: 100
Registriert: 25. Nov 2012, 19:33

Re: For mit Schleifenzähler

Beitrag von uhelp » 7. Mai 2018, 21:12

Code: Alles auswählen

for ((i=0;i<10;i++)); do
    # das aktuelle Datum im Format 2018-05-07_21:15 in $datum speichern
    datum=$(date +"%Y-%m-%d_%H:%M")
    # eine Datei touchen. Du hast eine einzige Datei unendlich oft "getouched". Du Grapscher!
    touch someFileName$datum
    # sleep will Sekunden. Geht auch 2.5 für zweieinhalb. Beachte, dass ein Punkt im amerikanischen das deutsche Komma ist.
    # und wir wollen länger als eine Minute warten, damit wir nicht auch dieselbe Datei erwischen
    # also sleepen wir 65 Sekunden.
    sleep 65
    # du könntest als Formatstring für "date" auch +"%Y-%m-%d_%H:%M:%s" verwenden.
    # dann sind werden Sekunden auch Bestandteil des Namens
done

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste