Forums Neueste Beiträge
 

while done und ein Counter

08/06/2016 - 16:40 von Joachim Hartmann | Report spam
Hallo,
das nachstehende Skript soll Dateien - unter einem anderen Namen -
speichern so sie noch nicht vorhanden sind. Das klappt auch
hervorragend. Es soll aber auch noch die Anzahl der kopierten Dateien
ermittelt werden. Ist die Anzahl Null endet das Skript, anderenfalls
soll ein weiterer - hier nicht aufgeführter - Teil ausgeführt werden.
Leider funktioniert das Zàhlen nicht wie gewünscht:

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#!/bin/bash
###########################################################################
# Skript zum Kopieren der Tracks vom Server auf den Web-Server
###########################################################################

# Deklaration von Konstanten
Q_Pfad="/home/quelle"
Z_Pfad="/var/ziel"
Anzahl=0

# In der Quellpfad wechseln da sonst Problem mit find bestehen
cd "$Q_Pfad"

# Liste der GPX-Dateien erstellen und und abarbeiten
find -type f -name '????-??-??*.gpx' | while read Q_Datei; do
# prüfen ob Datei schon vorhanden
if [ ! -f "$Z_Datei" ]; then
.
.
.
#################################################
echo "1 Zwischensumme vor dem kopieren: $Anzahl"
#################################################
cp -u "$Q_Datei" "$Z_Datei"
Anzahl=$[Anzahl + 1]
#################################################
echo "2 Zwischensumme nach dem kopieren: $Anzahl"
echo ""
#################################################
fi
done
#################################################
echo "3 Anzahl der kopieren Dateien: $Anzahl"
#################################################
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

Der Aufruf des Skriptes erzeugt folgende Ausgabe:

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
root@10:23:57# /etc/cron.daily/gpxcopy
1 Zwischensumme vor dem kopieren: 0
2 Zwischensumme nach dem kopieren: 1

1 Zwischensumme vor dem kopieren: 1
2 Zwischensumme nach dem kopieren: 2

3 Anzahl der kopieren Dateien: 0
root@10:24:00#
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

Mir ist unklar warum das korrekte Zàhlwerbgis die Schleife nicht "verlàsst"!
Wer weiss Rat, Google jedenfalls nicht! Oder ich stelle die Frage falsch.
Gruß aus der Stadt der CeBIT
Jochen
 

Lesen sie die antworten

#1 Christian Brabandt
08/06/2016 - 17:20 | Warnen spam
Hallo Joachim!

Joachim Hartmann schrieb am Mittwoch, den 08. Juni 2016:

Hallo,
das nachstehende Skript soll Dateien - unter einem anderen Namen -
speichern so sie noch nicht vorhanden sind. Das klappt auch
hervorragend. Es soll aber auch noch die Anzahl der kopierten
Dateien ermittelt werden. Ist die Anzahl Null endet das Skript,
anderenfalls soll ein weiterer - hier nicht aufgeführter - Teil
ausgeführt werden. Leider funktioniert das Zàhlen nicht wie
gewünscht:

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#!/bin/bash
###########################################################################
# Skript zum Kopieren der Tracks vom Server auf den Web-Server
###########################################################################

# Deklaration von Konstanten
Q_Pfad="/home/quelle"
Z_Pfad="/var/ziel"
Anzahl=0

# In der Quellpfad wechseln da sonst Problem mit find bestehen
cd "$Q_Pfad"

# Liste der GPX-Dateien erstellen und und abarbeiten
find -type f -name '????-??-??*.gpx' | while read Q_Datei; do
# prüfen ob Datei schon vorhanden
if [ ! -f "$Z_Datei" ]; then
.
.
.
#################################################
echo "1 Zwischensumme vor dem kopieren: $Anzahl"
#################################################
cp -u "$Q_Datei" "$Z_Datei"
Anzahl=$[Anzahl + 1]
#################################################
echo "2 Zwischensumme nach dem kopieren: $Anzahl"
echo ""
#################################################
fi
done
#################################################
echo "3 Anzahl der kopieren Dateien: $Anzahl"
#################################################
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

Der Aufruf des Skriptes erzeugt folgende Ausgabe:

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
:23:57# /etc/cron.daily/gpxcopy
1 Zwischensumme vor dem kopieren: 0
2 Zwischensumme nach dem kopieren: 1

1 Zwischensumme vor dem kopieren: 1
2 Zwischensumme nach dem kopieren: 2

3 Anzahl der kopieren Dateien: 0
:24:00#
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

Mir ist unklar warum das korrekte Zàhlwerbgis die Schleife nicht "verlàsst"!
Wer weiss Rat, Google jedenfalls nicht! Oder ich stelle die Frage falsch.



Die variable wird in einer subshell hochgezàhlt und ist demzufolge
spàter nicht mehr zugreifbar. google bringt z.B. diesen SO Post:
https://stackoverflow.com/questions...ll-dilemma

Grüße
Christian
Die Weiber sind gut, aber schwer werden sie besser.

Ähnliche fragen