Anzeige:
Ergebnis 1 bis 12 von 12

Thema: Variablen in Programmaufrufen innerhalb eines Shelscripts

  1. #1
    Registrierter Benutzer
    Registriert seit
    Apr 2002
    Beiträge
    5

    Variablen in Programmaufrufen innerhalb eines Shelscripts

    Hallo Leute, bräuchte mal kurz eure Hilfe.
    Ich möchte mit folgender Schleife zeilenweise Daten aus einer Datei lesen, um diese dann weiter zu bearbeiten. Hab mir das in etwa so vorgestellt:


    -code-
    for ((; i <= ENDE; i=$[$i+1)); do
    ZEILE=`"head -$i $DATEINAME|tail -1"`
    # weitere Befehle #
    done

    Kriegs aber nicht hin die Variablen richtig aufzulösen. Durch die Anführungszeichen interpretiert mir diesen Syntax als kompletten Befehl und es kommt eine Fehlermeldung. Ich glaub' ich hab alle Varianten durch AHHHHH. Hat jemand nen Tip für mich ?

    P.S.: Weiß jemand wie man die Zeichengröße von Strings ändern kann ? Will mir ein Programm bauen, was Dateien von Groß- auf Kleinschrift ändert. Hoffe man muß das nicht über eine umständliche Matrix machen.

    Schon mal Danke für Eure Hilfe !
    -RamsesII

  2. #2
    Registrierter Benutzer
    Registriert seit
    Dec 2001
    Ort
    Berlin
    Beiträge
    1.187

    Um Zeilenweise zu lesen benutze ich

    folgendes:
    -----snip-----
    i=0
    cat Datei | while read i ; do
    Befehle
    done
    -----snap-----
    Man kann i natuerlich auch auf einen anderen Wert setzen um damit weiter zu arbeiten.

    Was meinst du mit Zeichengroesse ?
    Um alles in klein Buchstaben zu aendern, wuerd ich lieber Perl benutzen.

    T;o)Mes
    Geändert von tomes (03.05.02 um 10:23 Uhr)
    You are registered as user #279055 with the Linux Counter
    ************************************************
    Man(n oder Frau) muss nicht alles wissen,
    Man(n oder Frau) muss nur wissen wo es steht !
    ************************************************
    www.sandtom.net

  3. #3
    Registrierter Benutzer
    Registriert seit
    Mar 2002
    Ort
    /home/tengri
    Beiträge
    51
    Zeilenweise aus einer Datei lesen und alles in Grossbuchstaben umwandeln würd ich so:
    Code:
    while read foo
    do
            echo "$foo" | tr "[a-z]" "[A-Z]"
    done <$DATEINAME
    hth
    Tengri

  4. #4
    Registrierter Benutzer
    Registriert seit
    Apr 2002
    Beiträge
    5
    Danke Jungs, werd das mal testen !

    -RamsesII

    <<< Nachtrag >>>
    Super Jungs, das Proggi läuft. Trotzdem würde nich interessieren warum meine Version nicht funktioniert. Ist ja schließlich nichts ungewöhliches Optionen per Variablen aufzurufen - oder ?

    Auf jeden Fall nochmal Danke !

    -Ramses II
    Geändert von RamsesII (03.05.02 um 12:52 Uhr)

  5. #5
    - - - - - - - - - - Avatar von zander
    Registriert seit
    Mar 2001
    Beiträge
    6.144
    for i in `cat file`; do echo "$i"; done

  6. #6
    Registrierter Benutzer
    Registriert seit
    Apr 2002
    Beiträge
    5
    Hmm, also OK Jungs, alle Eure Tips klappen ja wunderbar. Danke dafür. Aber meine Frage bezeiht sich eigentlich nur auf diese 1 Zeile:

    ZEILE=`"head -$i $DATEINAME|tail -1"`

    In der Variable $ZEILE soll halt die komplette Zeile abgelegt werden. Problem ist halt, das er hingeht und den String zwischen `` als kompletten Befehl ansieht und somit nicht kennt. Wenn ich die `` anders setze, werden die Variablen nicht aufgelöst und der Befehl kommt so wie beschrieben als "head -$i". Da head die Option -$i nicht kennt, geht es so auch nicht. Wenn Ihr mir sagt das es so nicht geht. OK.
    Dachte nur das es ja eigentlich gehen müsste !

    -RamsesII

  7. #7
    - - - - - - - - - - Avatar von zander
    Registriert seit
    Mar 2001
    Beiträge
    6.144
    ZEILE=`head -$i "$DATEINAME" | tail -1`

    Lediglich der Dateiname muss in Hochkommata stehen, da er unter Umständen Leerzeichen enthalten kann.

  8. #8
    - - - - - - - - - - Avatar von zander
    Registriert seit
    Mar 2001
    Beiträge
    6.144
    Das Problem mit Deinem Ansatz ist allerdings, dass Die Bearbeitungszeit mit der Anzahl der Zeilen wächst, da Du für jede Zeile auch alle vorherigen einliest. Eie Bearbeitung langer Dateien mit Deinem Ansatz wird dadurch wesentlich länger dauern.

  9. #9
    Registrierter Benutzer
    Registriert seit
    Apr 2002
    Beiträge
    5
    OK, habe aufgrund der Tips schon eine bessere Lösung gefunden, das Proggi ist fertig und läuft auch. Ich nutze es um Dateien in einem beliebigen Ordner rekursiv umzubenennen. ( Groß- auf Kleinschrift )
    Das Problem ist, das auf diesen Ordner sowohl über Samba als auch NFS erfolgt. Bei Zugriff über NFS muß aber alles in kleinschrift sein, sonst kann auf die Daten nicht zugegriffen werden. Und über Samba schleichen sich da halt schon mal Fehler ein. Da jede Datei aber in einem eigenen Ordner liegt und es ca. 1300 Files sind, währe das suchen und manuelle umbennen ziemlich mühsam ;-)

    Habe nun letzlich so gelöst:

    ####
    I=0
    find $1 |while read I ; do
    if [ "$2" = "-s" ] ; then
    O=`echo "$I" | tr "[A-Z]" "[a-z]"`
    else
    O=`echo "$I" | tr "[a-z]" "[A-Z]"`
    fi
    if [ "$I" != "$O" ] ; then
    mv $I $O
    echo "mv $O $I" >> $UNDO
    echo -n "."
    fi
    done
    ####

    O.K. es gibt bestimmt noch elegantere Lösungen. Aber als Quereinsteiger fummelt man sich halt so zurecht. ;-)

    ( Nur gut das ich diesen Forum gefunden habe *lol* )

  10. #10
    keiner_1
    Gast
    sorry aber kannst du das bitte in mrunix.de posten, kann es leider nicht dorthin verschieben...

  11. #11
    Registrierter Benutzer
    Registriert seit
    Apr 2002
    Beiträge
    5
    ???? Was soll ich da posten ???
    Meine Frage ?
    Oder willst Du das komplette Script ?

    -RamsesII

  12. #12
    keiner_1
    Gast
    dieses Forum ist nicht für Fragen gedacht, sondern für Tipps!!!!

Lesezeichen

Berechtigungen

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