Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Shell Anfänger haben großes Problem

  1. #1
    cpunktK
    Gast

    Question Shell Anfänger haben großes Problem

    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 :

    Schreiben Sie ein Skript, dass alle Dateien mit der länge 0 Byte im angegeben Verzeichnis zählt, anschließend auflistet und abfragt, ob die Dateien gelöscht werden sollen. Die Anzahl der übergebenen Parameter ist zu prüfen.
    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?
    Nen Freund von mir und ich suchen verzweifelt jetzt eine Lösung. Haben auch in anderen Foren schon nachgefragt. Haben jetzt auch eine zweite Lösungsvariante aber die funktioniert auch noch nicht so wie wir uns das vorstellen.
    Code:
    cd .. #in root Ordner Wechseln
    echo Pfad eingeben 
    read eingabe #Lese Pfad
    Pfad=$eingabe     # path
    ls $Pfad
    i=0
    find $Pfad -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 eingabe2
            if [[ $eingabe2 == "y" ]]; then
                    echo "rm $element[$j]"
            fi
    done
    echo Ende
    Könntet ihr uns da evlt irgendwie bei weiter helfen. Haben auch schon mehrer Skripte von bspw. Selflinux oder bei dem tutorials.de das durchgearbeitet. War sehr hilfreich eigentlich. Aber auf ne vernünftige Lösung kommen wir allerdings nicht.

  2. #2
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hallo,

    laut Aufgabenstellung wird der Pfad des zu durchsuchenden Verzeichnisses als Parameter an das Skript übergeben; Zugriff auf die Parameter erhältst du mit: $# (= Anzahl der übergebenen Argumente) und $1, $2, ... (= da liegen die Argumente drinnen).
    Die Dateiliste kannst du dann (wie schon von dir erkannt) mit dem find-Befehl ausgeben lassen, allerdings arbeitet dein find-Aufruf noch rekursiv und listet auch Verzeichnisse (lt. Aufgabenstellung sollen ja nur Dateien angezeigt werden, zwar ist ein Verzeichnis auf Dateisystemebene auch nur eine Datei, aber das ist hier vermutlich nicht gemeint). Stichwörter für den richtigen find-Aufruf wären maxdepth und type.
    Das Zählen könnte man auch mit einem find-Aufruf durchführen und die Ausgabe an wc weiterleiten, damit lassen sich die von find ausgegebenen Zeilen zählen.
    Die Abfrage zum Löschen lässt sich wieder mit find realisieren, und zwar mit dem -exec Argument; dort kann man für jede gefundene Datei rm -i aufrufen (die Option gibt an, dass rm vor dem Löschen nachfragen soll).

    Man hat jetzt natürlich drei (nahezu identische) find-Aufrufe, wahrscheinlich lässt sich das Skript noch optimieren, indem man die Ausgabe des ersten find-Aufrufes in einem Array bzw. einer temporären Datei zwischenspeichert.

    Ich hab meinen Text jetzt natürlich etwas allgemein gehalten, weil ich da etwas von Schularbeiten (finde ich übrigens stark, dass man Shell-Programmierung auch in der Schule machen kann) gelesen habe Wie weit seid ihr denn schon in dem Bereich? Kennt ihr schon Pipes und Ausgabeumleitungen?

    Gruß, Florian
    Ein gebrechlich Wesen ist der X-Server.

  3. #3
    Registrierter Benutzer
    Registriert seit
    18.03.2008
    Beiträge
    22
    foo bar


    asdf

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •