Unix Shell while mit Ausgabeumlenkung ?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von itschi128, 13.11.2006.

  1. #1 itschi128, 13.11.2006
    Zuletzt bearbeitet: 13.11.2006
    itschi128

    itschi128 Grünschnabel

    Dabei seit:
    13.11.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Hallöchen..

    habe mich hier mal angemeldet weil ich gerade wirklich nicht weiterkomme

    Habe folgendes einfaches Script:

    i=1
    n=10
    while [ $i -le $n ]
    do
    cat FILE
    i='expr $i + 1'
    done

    Alles wunderbar aber:

    i=1
    n=10
    while [ $i -le $n ]
    do
    cat FILE >> FILE1
    i='expr $i + 1'
    done

    funktioniert nicht..
    Wie muss ich den Ausdruck mit der Ausgabeumlenkung schreiben ?
    Die Shell sagt mir : bash: [: too many arguments

    Danke schonmal im voraus :)
     
  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. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Ohne zu wissen, was FILE ist, lassen sich weder die Funktionsweise noch der Fehler des Skriptes nachvollziehen. Vielleicht kannst Du dies noch erlaeutern. Sind dies Parameter?
     
  4. #3 itschi128, 13.11.2006
    itschi128

    itschi128 Grünschnabel

    Dabei seit:
    13.11.2006
    Beiträge:
    3
    Zustimmungen:
    0
    FILE ist in diesem Fall eine einfache Textdatei
    mit irgendwelchen ASCII Inhalten.
    In diesem Fall soll also der Inhalt von FILE 10 mal an FILE1
    angehängt werden.

    Villeicht kann man dies auch anders lösen.

    Es geht mir natürlich dabei um das Prinzip -
    das ich das auch mit einem Editor könnte ist mir klar :)
     
  5. caba

    caba GESPERRT!

    Dabei seit:
    13.08.2002
    Beiträge:
    351
    Zustimmungen:
    0
    rikola: erst denken, dann schreiben

    itschi128: Dein fehler liegt nich in der while-zeile sonder das expr
    Code:
    i=`expr ${i} + 1`
    So muss das aussehen, dann gehts auch...

    regards
    Manuel
     
  6. #5 Wolfgang, 14.11.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Und weil expr ein externer Prozess ist, wird ein
    innerhalb einer bash oder ksh mindestens 10 x schneller sein.
    Nur mal so ein kleiner Vergleich auf meiner alten Kiste:
    Darum verwende immer da wo du expr schreiben willst, besser oben genannte Methode. (das gilt natürlich nur für die Shelltypen, die das unterstützen)
    Du kannst natürlich auch
    benutzen.
    Die Backticks sollte man eigentlich heute nicht mehr verwenden.
    Um 10 x eine Datei in ein Target zu pipen, geht auch
    Code:
    for i in $(seq 10); do cat inputfile;done >output-file
    
    Gruß Wolfgang
     
  7. #6 itschi128, 15.11.2006
    itschi128

    itschi128 Grünschnabel

    Dabei seit:
    13.11.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Schönen Dank erstmal :)

    @caba:
    Die Variable selbst in geschweifte Klammern zu schreiben hat bei
    meinem Fall den Fehler nicht behoben.. es kam die gleiche Meldung der Bash

    @Wolfgang;
    Dein Weg erst mit der for Schleife die Daten zu "sammeln" und dann in die
    output File zu schreiben war genau richtig .. klappt wunderbar
    ..weiß nicht ob ich da irgendwann drauf gekommen wäre :))
     
  8. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Der Vorschlag bezog sich nicht auf die geschweiften Klammern, sondern auf die Art der einfachen Anfuehrungszeichen: Du hast ' benutzt, waehrend es ` sein sollte.

    @Wolfgang:
    gute Tips! Weswegen sollte man backticks nicht mehr benutzen? Auch aus Leistungsgruenden? Und wie macht man es besser - runde Klammern?
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Wolfgang, 15.11.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Nicht aus Performancegründen, sondern um genau das was du meintest zu vermeiden.

    Benutze statt Backticks
    Code:
    B=`echo $a`
    #besser
    B=$(echo $a)
    
    Meine persönliche Meinung dazu:
    Mir ist klar, dass vielfach keinen Wert mehr auf Performance gelegt wird, aber ich habe es als guten Stil und alter Zeit so gelernt.
    Bei Einzeilern mag das mancmal egal sein. Aber wenn man sich das gleich richtig angewöhnt, passiert es auch bei größeren Prozessen nicht mehr solch Resourcen zu verschleudern. Da kann und ist es dann wichtig.

    Gruß Wolfgang
     
  11. caba

    caba GESPERRT!

    Dabei seit:
    13.08.2002
    Beiträge:
    351
    Zustimmungen:
    0
    Die geschweiften klammern waren nur ne Service-Leistung von mir.... :)
    Nicht die eigentliche Problembehebung.

    und Wolfgang hat natürlich recht:
    Code:
    FOO=$(expr ...)
    ist natürlich besser
     
Thema:

Unix Shell while mit Ausgabeumlenkung ?

Die Seite wird geladen...

Unix Shell while mit Ausgabeumlenkung ? - Ähnliche Themen

  1. Unix Shell echo/ausgabe solange Bedingung ...

    Unix Shell echo/ausgabe solange Bedingung ...: Hallo liebe Unix User, da ich relativ neu bin, was Linux / Unix angeht stehe ich gerade komplett auf dem Schlauch! Problem: Aus mehreren...
  2. Hilfe...muss etwas lösen habe aber keine Unix Shell Script Kenntnisse!!!

    Hilfe...muss etwas lösen habe aber keine Unix Shell Script Kenntnisse!!!: Hallo, Habe ein riesen Problem und kenne nichts von Unix Shell Scripts!!! Hier der kleine Shell Script "Schlaufe.sh":...
  3. Unix-Kernel + Unix-Shells: Ein paar Grundfragen

    Unix-Kernel + Unix-Shells: Ein paar Grundfragen: Hallo, wie schon am Thema abzulesen, will ich euch heute mit ein paar Grundfargen zum Unix-Kernel und Unix-Shells auf den Geist gehen. :D...
  4. Netzwerkscanner unter UNIX shell

    Netzwerkscanner unter UNIX shell: Hallo zusammen ich möchte ein komplettes Netzwerk scanner, bedeutet ich gebe Start- und Zieladresse vor, das script scannt alles und gibt das...
  5. Unixzeit in einer Shell-Procedure

    Unixzeit in einer Shell-Procedure: Hai. Ich benötige die Unixzeit in Sekunden in einer Procedure, um damit einen Dateinamen eindeutig zu machen. Z.B. datname.1637826482.txt...