Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Abfrage und Auswerten von Dateien

  1. #1
    Gast

    Smile Abfrage und Auswerten von Dateien

    Hi,
    ich habe schon mehrere Fragen gestellt, die immer wieder auf einer FOR-Schleife nach dem Motto:

    set=$(ls)
    for i in do

    ...
    done

    Dazu habt Ihr mir auch schon einige tolle Antworten gesandt, aber ich mache wohl was falsch. Die Schleife läuft nie genau so oft durch, wie ich es erwarte.

    Jetzt habe ich es mal so probiert

    for i in $(ls)
    do
    done


    Stimmt das?

    Hat jemand eine getestete Abfrage, mit der er für alle Dateien in einem Verzeichnis einmal eine oder mehrere bestimmte Actionen einleitet?
    MfG,
    Werner
    PS: Kann man eigentlich "fertige" Scripten wo posten, so daß sich jemand Gedanken darüber machen kann, was man alles vergessen hat?

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255

    Post

    Ich habe einen kleinen Fehler gemacht...
    Ist nämlich keine Datei im Verzeichnis vorhanden, so expandiert $(ls) zu "Nichts" und "set" gibt die Liste aller Shellvariablen aus. Das ist nicht ganz das, was wir erwarten. Als Lösung bietet sich das schon von Dir beschriebene "for i in $(ls)..." an oder Folgendes:

    <code>set ""$(ls)<code> #### OHNE "="!!!
    <code>shift 1</code>
    <code> for i do...</code>

    Hier wird die Liste "künstlich" verlängert, "set" wird somit niemals die Liste der Variablen ausgeben. Mit "shift 1" überspringen wir das erste Element (die leere Zeichenkette).

    Und im Anschluss gleich ein nettes Skript "Übungen zur Shellprogrammierung Teil 2" :

    <pre>
    #!/bin/sh

    cd ${1:-./}
    declare -i number=0

    for i in $(ls)
    do
    if test -d $i
    then
    $0 $i
    else
    number=number+1
    fi
    done
    echo "Verzeichnis: $(pwd) enthaelt $number Dateien"
    </pre>

    Das Skript muss mit vollständiger Pfadangabe gerufen werden! Viel Spaß beim Knobeln

    Thomas

    [Dieser Beitrag wurde von thommy am 21. September 2000 editiert.]

    [Dieser Beitrag wurde von thommy am 21. September 2000 editiert.]

  3. #3
    pitu
    Gast

    Post

    In der Shell gibt es viele Möglichkeiten, das gleiche zu erreichen.
    Ich mag vollgendes Konstrukt sehr gerne:

    <pre>
    LISTE=`ls /ver/zeich/niss`


    for i in $LISTE; do
    echo $i
    done
    </pre>

    Diese Konstrukt hat den Vorteil, das du dich nicht explizit in diesem Pfad befinden musst. Ausserdem kann man $LISTE dann auch gleich weiterverwenden.

    Gerne mag ich es, die Einstellungen von aussen, oder am Anfang einzustellen, damit ich weiter weiter nix machen muss.

    z.B.
    <pre>
    DIR="$HOME"
    LS_OPT="-A"


    source $HOME/.mein.script.rc


    test "$1" = "-d" && DIR="$2"
    test "$3" = "-d" && DIR="$4"
    test "$1" = "-o" && LS_OPT="$2"
    test "$3" = "-o" && LS_OPT="$4"

    LISTE="ls $LS_OPT $DIR"


    for i in $LISTE; do
    echo $i
    done
    </pre>

    Dies bedeutet beispielsweise, das ich Einstellungen im Script selber habe, die ich jederzeit im Script ändern kann. Wenn ich nun in meinem Home eine Datei .mein.script.rc habe, dann kann ich dort die Variablen DIR und LS_OPT neu definieren.
    Mit Komandozeilenoptionen kann ich die Variablen nochmal verändern.

    Das script wir dadurch übersichtlicher als:
    <pre>
    for in in $(ls bla böub sonstwas); do
    echo $i
    done
    </pre>

    Aber das ist jedem seinen eigenen Stil überlassen.

    thorsten

    ------------------
    Thorsten Wandersmann
    SuSE GmbH, Nuernberg

  4. #4
    pitu
    Gast

    Post

    thommy: wie kriegst du im (pre) leerzeilen hin?

    thorsten

    ------------------
    Thorsten Wandersmann
    SuSE GmbH, Nuernberg

  5. #5
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255

    Post

    Hallo Thorsten,

    so richtig bin ich auch noch nicht hinter zulässige und unterdrückte Formatierungsbefehle gestiegen... (früher ließ sich sogar mal Text &lt;b&gt;fett&lt;/b&gt; drucken, jetzt nicht mehr???)

    Eine zusätzliche Leerzeile ist wohl nur über die Aufteilung des Textes in zwei &lt;pre&gt;&lt;/pre&gt;-Formatierungen möglich, mehrere &lt;br&gt; werden leider unterdrückt...

    Grüße Thomas

Lesezeichen

Berechtigungen

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