fehlerhafte Addition - Bash

Merlin732

Erfahrenes Mitglied
Hallo,

ich bin Neuling in der bash-Programmierung und habe folgendes Problem.

Ich möchte rekursiv die Größe von Verzeichnisssen bestimmen.
Das Kommando 'du' ist mir bekannt, aber leider nicht erlaubt :p

Ich hatte folgendes Skript geschrieben, wobei ich die Gesamtgröße als globale Variable exportiert habe, um den Wert zu sichern, da ich Ihn am Ende brauche, allerdings nicht weiß, wie ich den Wert retten kann.

Code:
#!/bin/bash
echo $gesamtgroesse
cd $1 #falls kein Parameter übergeben wird, so wechsle in Hauptverzeichnis
for i in `ls`
do
        if [ -d $i ]
        then
                groesse=`ls -l $PWD | grep ^d | grep -w $i | awk '{print $5}'`
                echo Verzeichnis $i : Groesse $groesse Byte
                echo
                puffer=$(($(($gesamtgroesse))+$(($groesse))))
                export gesamtgroesse=$puffer
                # es ist der vollstaendige Pfadname erforderlich
                $HOME/BS_Uebungen/space $i
        fi
done

Mir wurde klar, dass es so nicht geht, da die Variable nach dem Ablauf der subshell ihren alten Wert wiederbekommt und es mir somit nichts nützt.

Daher habe ich das Skript etwas verändert

Code:
#!/bin/bash
gesamtgroesse=$2
cd $1 #falls kein Parameter übergeben wird, so wechsle in Hauptverzeichnis
for i in `ls`
do
        if [ -d $i ]
        then
                groesse=`ls -l $PWD | grep ^d | grep -w $i | awk '{print $5}'`
                echo Verzeichnis $i : Groesse $groesse Byte
                echo
                puffer=$(($(($gesamtgroesse))+$(($groesse))))
                # es ist der vollstaendige Pfadname erforderlich
                gesamtgroesse=`$HOME/BS_Uebungen/space $i $puffer`
        fi
done

Ich speichere mir die Gesamtgroesse in einer Variable, welche den Rückgabewert der Subshell erwartet und gebe die bisherige Gesamtgröße(puffer) mit.

Meine Fragen sind nun:

Klappt das? (bei mir kommen noch Fehler)
Wie kann ich Daten aus der Subshell zurückliefern? (mit echo auf Stdout schreiben? aber wie genau)
Kann jemand meine Lösung ergänzen/verbessern?
 

Neue Beiträge

Zurück