Re: while done und ein Counter
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:
>
> ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
> 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.
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/13726764/bash-script-while-loop-subshell-dilemma
Grüße
Christian
--
Die Weiber sind gut, aber schwer werden sie besser.
-- Jean Paul
Reply to: