Problem mit Rekursion in Bash / Funktioniert das überhaupt?

Diskutiere Problem mit Rekursion in Bash / Funktioniert das überhaupt? im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Hallo Allerseits, ich versuche gerade ein kleines Shell skript zu schreiben, welches bei einem gegebenen Verzeichnis alle darunter liegenden...

  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. #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
     
  3. #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. Probleme mit WinSCP und Rechten

    Probleme mit WinSCP und Rechten: Hallo. Ich habe vor ein paar Tgen meinen ersten Ubuntu 16.04 vServer bei 1&1 bestellt, gemäß dem sicheren Umgang damit, habe ich erstmal den SSH...
  2. Bootproblem

    Bootproblem: Hallo Ein PC (i686 mit Debian unstable, nox) hat Bootprobleme (will heißen ist erfolgt keine Grafikausgabe. was ich bisher gemacht habe: HDD an...
  3. Crontab und Scripts - Problem

    Crontab und Scripts - Problem: Hallo Zusammen Ich habe ein Script welches mittels Cronjob ausgeführt werden soll. Gemäss Log wird es auch ausgeführt, jedoch passiert nichts:...
  4. Problem bei der installation einer Sun Netzwerkkarte

    Problem bei der installation einer Sun Netzwerkkarte: Guten Morgen zusammen, beim installieren einer zusätzlichen Netzwerkkarte habe ich ein Problem. Die Karte wird nicht automatisch installiert. Es...
  5. Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe

    Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe: Liebe Community, zurzeit arbeite ich an eine Active Directory Domäne die mittels Samba läuft. Dazu habe ich einen AD DC auf Debian 8.7 mit Samba...