Shell Problem

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von stone89, 28.04.2008.

  1. #1 stone89, 28.04.2008
    Zuletzt bearbeitet: 28.04.2008
    stone89

    stone89 Grünschnabel

    Dabei seit:
    28.04.2008
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    Olsberg
    Hallo
    Ich programmiere noch nicht so lange Shell Skripte wie einige von euch.
    Achso bevor ichs vergesse, ich nutze die Shell unter Suse 10.3 das ist die bash
    Habe erst kürzlich in der Schule damit angefangen. Habe da bei einer Aufgabe ein Problem.
    Aufgabenstellung lautet wie folgt :
    Mein Ansatz hier zu schaut wie folgt aus
    Code:
    cd .. #in root Ordner Wechseln
    echo Pfad eingeben 
    read $Pfad #Lese Pfad   
    cd $Pfad  #Geht zum Pfad
    ls        # listing des Ordners des Pfades
    echo Alle Dateien mit 0 Byte
    echo ""
    find -size 0 
    ls
    echo Möchten Sie $element[x] löschen? Y oder N
    read $eingabe
    
    Schleife drum rum aber wie :-)
    
    if [$eingabe=Y]
    then 
    rmdir $element[x]
    x++
    elif [$eingabe=N]
    then x++
    else 
    sh linux4.sh
    fi
    
    Nun ist die Frage, wie genau ich das dann mit der eingabe einlesen und überprüfen machen kann. Des weiteren wie das genau funktioniert, das ich die Funktion wie gefordert erhalte.

    Code:
    echo Pfad eingeben 
    read $Pfad #Lese Pfad   
    cd $Pfad  #Geht zum Pfad
    An der Stelle stellt sich für mich die Frage, wie ich es hinbekomme das ich in mehrer Verzeichnise dann wechseln kann. Weil ich mach ja vorher das cd .. dann komm ich ja in den root ordner aber wenn ich von da in den Ordner Desktop und dort in den Ordner Sicherung springen will wie kann ich das realisieren?
     
  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. framp

    framp Mitglied

    Dabei seit:
    13.07.2006
    Beiträge:
    27
    Zustimmungen:
    0
    Warum wechselst Du immer mit cd? Du kannst 'ls $PATH' benutzen genauso wie 'rm $FILE' wobei $FILE ein absoluter Filename ist. Das macht es wesentlich einfacher.
     
  4. #3 supersucker, 28.04.2008
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Und mit while und read kannst du ohne Probleme die Parameter einlesen.

    Googlen nach while + read + bash dürfte dir mehr als genug brauchbare Beispiele geben.
     
  5. framp

    framp Mitglied

    Dabei seit:
    13.07.2006
    Beiträge:
    27
    Zustimmungen:
    0
    Das folgende Fragment zeigt die wichtigsten Dinge.

    Code:
    P=$1    # path
    
    i=0
    find $P -size 0 | while read FILE; do
            element[$i]=$FILE
            let i=i+1
    done
    
    j=0
    for ((j=0; j<$i; j++)); do
            echo -n "Delete ${element[$j]} ?"
            read A
            if [[ $A == "y" ]]; then
                    echo "rm $element[$j]"
            fi
    done
     
  6. #5 stone89, 29.04.2008
    stone89

    stone89 Grünschnabel

    Dabei seit:
    28.04.2008
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    Olsberg
    Hallo
    Danke Framp für deine Hilfe. Hab das jetzt mal versucht umzusetzen.
    Der Code sieht wie folgt aus:
    Code:
    cd .. #in root Ordner Wechseln
    echo Pfad eingeben 
    read eingabe #Lese Pfad
    P=$eingabe     # path
    cd $P
    i=0
    find $P -size 0 | while read FILE; do
            element[$i]=$FILE
            let i=i+1
    done
    echo weiter
    j=0
    for ((j=0; j<$i; j++)); do
            echo -n "Delete ${element[$j]} ?"
            read A
            if [[ $A == "y" ]]; then
                    echo "rm $element[$j]"
            fi
    done
    echo Ende
    
    Ich hoffe ich das so richtig verstanden, wie du das da hingeschrieben hattest. Wie gesagt mach das noch nicht so wahnsinnig lange. Hab mir auch schon einige Skripte angesehn. Beispielsweise das Tutorial auf Tutorials.de und das von Self Linux. Also hab mich schon damit beschäftigt. So die ersten Aufgaben die wir hatten konnt ich auch ganz gut lösen, nur immoment haperts.
    Bei der Source die ich ein wenig angepasst habe Arbeitet er das obere ab. Sagt aber er findet keine Datei mit 0Byte obwohl ich ein paar dummys erstellt habe. Und nach der abarbeitung sollte er ja welche gefunden haben und in die for springen. Allerdings springt er dann einfach zum ende und das wars. :hilfe2:
     
  7. #6 Wolfgang, 29.04.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Erstens:
    Crossposting ist nicht erwünscht.
    Zweitens:
    Dein while read läuft in einer Subshell, deshalb sind die Variablen nach Verlassen wieder unbekannt, bzw leer.
    Lösung:
    Pack die Aktion in deine while read Schleife direkt rein.

    Wolfgang
     
  8. #7 stone89, 29.04.2008
    stone89

    stone89 Grünschnabel

    Dabei seit:
    28.04.2008
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    Olsberg
    Sorry wegen dem Crossposting.
    Kommt nicht mehr vor. versprochen.
     
  9. #8 Wolfgang, 29.04.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Alle klar, ich nehm dich beim Wort. ;)

    Gruß Wolfgang
     
  10. framp

    framp Mitglied

    Dabei seit:
    13.07.2006
    Beiträge:
    27
    Zustimmungen:
    0
    Eine Möglichkeit das Problem zu lösen. Wie kann man aber die Laufvariablen an die externe Subshell weiterreichen? export funktioniert leider nicht :(
     
  11. #10 Wolfgang, 29.04.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Das liegt hier an der Pipe.
    Du kannst aber das Ergebnis von find gleich in ein Array packen.
    Code:
    F=();
    F=($(find ./ -type f ));
    
    Ein export bringt nix, da die subshell nicht an die parent Shell exportieren kann.
    Das geht nur andersrum.
    Die andere Lösung habe ich oben genannt.

    Gruß Wolfgang
     
  12. framp

    framp Mitglied

    Dabei seit:
    13.07.2006
    Beiträge:
    27
    Zustimmungen:
    0
    <OT>Nice feature. Ich setze bislang immer perl oder awk ein wenn ich Arrays brauche. Kannst Du mir einen Hint/Link geben, was bei T=(...) eigentlich im Hintergrund abläuft? </OT>

    Code:
    #!/bin/bash
    
    P=$1    # path
    
    element=($(find $P -size 0))
    
    j=0
    while [ ${element[$j]} ]; do
            echo -n "Delete ${element[$j]} ?"
            read A
            if [[ $A == "y" ]]; then
                    echo "rm $element[$j]"
            fi
            let j=j+1
    done
    sieht schon wesentlich eleganter aus
     
  13. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  14. #12 Wolfgang, 30.04.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Vorsicht, das läuft vor die Wand, wenn Dateien mit häßlichen Leerzeichen vorkommen.
    Zu Array in der bash sieh dir mal die man bash an.
    Das hier
    Code:
    T=($(command))
    gibt die Ausgabe des $(command) in ein Array.
    $(command) ist die neue Schreibweise für Backtick command Backtick.
    Backticks sind in der bash/ksh deprecated.

    Gruß Wolfgang
     
  15. framp

    framp Mitglied

    Dabei seit:
    13.07.2006
    Beiträge:
    27
    Zustimmungen:
    0
    Thx. Habe die Infos in der man Page gefunden. Werde mir wohl mal demnächst die gesamte man page mit ihren 5000 Zeilen mal durchlesen. Scheint noch mehr features in der bash zu geben die ich noch nicht kenne :))
     
Thema:

Shell Problem

Die Seite wird geladen...

Shell Problem - Ähnliche Themen

  1. Shell Script Problem

    Shell Script Problem: Hallo zusammen, ich arbeite momentan mit einem Plagiat Tool, die ich über Git Bash ausführe. Es wird im Endeffekt ein Link generiert, die ich...
  2. Problem bei Shellskript

    Problem bei Shellskript: Hey Leute, ich soll ein Shellskript schreiben welches einen Verzeichnis, welches ich als Paramter angebe, rekursiv nach der Textdatei mit den...
  3. Probleme mit symlink im shell script

    Probleme mit symlink im shell script: Hallo, ich habe vor ein ganz einfaches Script zu erstellen (es sind natürlich mehrere Dateien und Ordner nach dem gleichen Schema):...
  4. HILFE!! Riesen Problem mit root-shell.

    HILFE!! Riesen Problem mit root-shell.: Hallo Leute, ich hoffe ihr könnt mir helfen, ihr seid meine letzte Hoffnung. Ich war so dumm und habe die root-shell in der /etc/passwd...
  5. Probleme mit Shell-Script (Listen, Strings, etc.)

    Probleme mit Shell-Script (Listen, Strings, etc.): Schönen guten Morgen! Ich habe leider einige kleine Probleme mit einem Shell-Script - bzw. weiss ich nicht wie ich richtig ansetzen bzw. weiter...