Problem mit Rekursion in Bash / Funktioniert das überhaupt?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von sramko, 21.09.2009.

  1. sramko

    sramko Grünschnabel

    Dabei seit:
    21.09.2009
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo Allerseits,

    ich versuche gerade ein kleines Shell skript zu schreiben, welches bei einem gegebenen Verzeichnis alle darunter liegenden Dateien und Ordner durchläuft und ein paar Informationen ausspuckt. Allerdings gibt es zwei bedingungen:
    1. Es müssen zunächst die Dateien eines Ordners und erst danach die Unterordner behandelt werden
    2. Alles muss in alphabetischer Reihenfolge durchlaufen werden.

    Nach einigen Versuchen, WebSearch und ManPages lesen kam ich zu dem Ergebiss, dass "find" diese Aufgabe nicht bewältigen kann.
    hier mein ansatz als bash-Script:
    Code:
    iteration()  
    {
        echo $1 $2;
        local dr=$1;
        local i=;
        local j=;
        local nr=$2;
        
        for i in $(ls -1 -q "$dr") ; do 
    	if test -f $i ; then
    	    echo f\;$nr\;$i\;$dr/$i ;
    	fi
        done;
        
        for j in $(ls -1 -q "$dr") ; do 
    	if test -d $j ; then
    	    echo d\;$nr\;$j\;$dr/$j ;
    	    iteration  $dr/$j $[$nr+1]; #hier ist das Problem
    	fi
        done;   
    }
    
    Der erste durchlauf klappt super. Aber die Iterration klappt nicht. Wie ihr seht, hab ich es mit "local" Variablen versucht, ohne genaues Wissen darüber, wie das in Bash funktioniert. In Java, Perl, Python, PHP,.... würde der Code ja prima funktionieren, aber unter Bash bekomme ich ihn nicht zum laufen.

    Nun die Frage: kann mir jemand ein Beispiel für rekursieve Bash-Programmierung schicken oder mir zumidest zu verstehen geben, dass Rekursion in Bash nicht funktioniert?

    Danke,

    Lyrik
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 21.09.2009
    Zuletzt bearbeitet: 21.09.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    Rekursion funktioniert prima, hab ich zum Spass grad mal getestet indem ich die fibonacci sequence rekursiv in der bash geschrieben hab. ;)

    Was ist denn die Fehlermeldung? Edit: Und der erste Aufruf waere ja vielleicht auch interessant.

    Edit2:
    Ah, habe gerade ein wenig mit deinem Code rumgespielt, die Tests sind das Problem. Du fuehrst die Tests im falschen Ordner aus, bzw. musst noch den Pfad davor stellen. Hier mal eine leicht angepasste Version deines Skripts:

    Code:
    iteration()
    {
        echo $1 $2
        dr=$1
        nr=$2
    
        for i in $(ls -1 -q "$dr"); do
            if [ -f $dr/$i ]; then
                echo "f;$nr;$i;$dr/$i"
            fi
        done
    
        for j in $(ls -1 -q "$dr"); do
            if [ -d $dr/$j ]; then
                echo "d;$nr;$j;$dr/$j"
                newdir="$dr/$j"
                newnr=$((nr + 1))
                iteration $newdir $newnr
            fi
        done
    }
    
    mfg,
    bytepool
     
  4. #3 sramko, 21.09.2009
    Zuletzt bearbeitet: 21.09.2009
    sramko

    sramko Grünschnabel

    Dabei seit:
    21.09.2009
    Beiträge:
    2
    Zustimmungen:
    0
    Fehler gefunden: ich hab jeweils in der if-Abfrage versäumt, den gesamten Pfad mit anzugeben.

    Wer's braut: hier nochmal der korrigierte Code

    Code:
    iteration()  
    {
        #echo $1 $2;
        local dr=$1;
        local i=;
        local j=;
        local nr=$2;
        
        #echo dr $dr, nr $nr,
        for i in $(ls -1 -q "$dr") ; do 
    	if test -f "$dr/$i" ; then
    	#    echo f
    	    echo f\;$nr\;$i\;$dr/$i ;
    	fi
        done;
        
        for j in $(ls -1 -q "$dr") ; do 
    	if test -d "$dr/$j" ; then
    	 #   echo d
    	    echo d\;$nr\;$j\;$dr/$j ;
    	    iteration  "$dr/$j" $[$nr+1];
    	fi
        done;   
    }
    
    
    iteration $(pwd)
    
     
Thema:

Problem mit Rekursion in Bash / Funktioniert das überhaupt?

Die Seite wird geladen...

Problem mit Rekursion in Bash / Funktioniert das überhaupt? - Ähnliche Themen

  1. Virtualboxproblem

    Virtualboxproblem: Hallo Folgnedes Problem: Ich kann ohne Probleme In Debian-Sid, 64Bit und virtualbox-dkms Unixoide installieren, wenn es sich um eine...
  2. grub-pc Probleme bei upgrade

    grub-pc Probleme bei upgrade: Hallo, ich habe beim dist-upgrade folgendes Problem: ---------- Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Trigger für...
  3. Problem bei apt-get upgrade (Kali 2.0)

    Problem bei apt-get upgrade (Kali 2.0): Hi, seit paar Tagen habe ich einige Probs. Dachte es sei mal an der Zeit für ein Update und nun tauchen da einige Fehler auf: Es müssen noch 0 B...
  4. Probleme mit YUM

    Probleme mit YUM: Hallo, ich habe CentOs 7 als Dualboot mit Windows 7 auf einen Dell Latitude E5510 installiert. Dies hat soweit auch alles geklappt. Leider habe...
  5. Problem mit Win-Zugriff auf SAMBA

    Problem mit Win-Zugriff auf SAMBA: Hallo rundherum, vielleicht hat jemand eine Idee... Habe jetzt schon 1 1/2 Tage damit verbraten und den Fehler nicht gefunden. Problem:...