Variable über Pipe überprüfen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von blueunderground, 14.11.2005.

  1. #1 blueunderground, 14.11.2005
    blueunderground

    blueunderground Mitglied

    Dabei seit:
    13.10.2005
    Beiträge:
    28
    Zustimmungen:
    0


    erhalte daraus eine Zahl (10.0), nun möchte ich überprüfen, wenn dieser Wert größer als 5.0 ist z.b "Preis höher" aus geben und wenn diese kleiner als 5.0 ist "Preis kleiner".

    so sollte es aussehen:

    Habt ihr ein Vorschlag
    Danke
     
  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. #2 Wolfgang, 14.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Hier nur mal schnell mein Lösungsvorschlag, zum selber fertigbasteln. ;)
    Schreib dein Konstruct in eine for Schleife und prüfe dort die Variable.
    Alternativ kannst du es auch direkt weiter in eine Pipe schieben, wo dahinter ein Test lauert.
    Variante 1:
    for I in $(deine commandline here); do if [ $I -gt 5 ];\
    then echo "$I greater then 5"; elif....;fi; done

    Variante 2 überlass ich deiner Phantasie ;)

    Gruß Wolfgang
    PS Das schreit förmlich nach einer Perl-Lösung, obgleich ich mir die mal verkneife.:D
     
  4. #3 ninguno, 14.11.2005
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    der haken an der sache ist, glaube ich, dass es sich hier um fliesskomma werte handelt. mit denen kommt die shell (also zumindest die bash) selbst nicht klar, daher bietet sich bc dafür an:
    Code:
    zahl=$( grep -A 41870 -e 'store-id="\AM' /file.xml | grep -e \<price-assignment\ product\-id\=\.*02715350000 | cut -f 4 -d '"')
    if (( $(echo "$zahl>5.0"|bc) == 1 )) ; then echo "grösser"; else echo "kleiner"; fi
     
  5. #4 Wolfgang, 14.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo @ninguno
    das mit dem Glauben ist so eine sache, wenn der Fragesteller sein
    Problem nicht so richtig klar ausdrückt. ;)
    Ein Paar Beispieldaten und nach was gesucht wird, wären da schon hilfreich.
    Wahrscheinlich ist ein recht kurzer Perl-Einzeiler weit effizienter.
    bcist natürlich eine Möglichkeit.
    Das grep-Gebilde davor schaut mir etwas zu heftig aus.
    Solang aber keine Rohdaten vorliegen, kann man nur spekulieren.

    Ich spekuliere mal, dass das mit einer einzigen sed oder perl
    Regexpression filterbar ist. Unter perl ist der Vorteil gegeben, das auch gleich noch auswerten zu können (auch mit Fließkomma!).
    Also alles unter einem einzigen Prozess!


    Gruß Wolfgang
     
  6. #5 blueunderground, 15.11.2005
    blueunderground

    blueunderground Mitglied

    Dabei seit:
    13.10.2005
    Beiträge:
    28
    Zustimmungen:
    0
    @ninguno
    Vielen Dank, genau das suchte ich, vielen Dank!

    @ Wolfgang_1
    Na klaro auch an Wolfgang ein großes Danke, der hier immer stets mit hervorragenden Ideen auffährt.

    @ beide
    Asche auf mein Haupt, das nächste Mal gibts mehr Infos :-)


    Danke
    Blue
     
  7. #6 Wolfgang, 15.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Kleine Anmerkung noch zu @ninguno seiner Variante:
    Werte die genau 5.0 sind werden hier auch als kleiner bewertet.
    Mathematisch ist das nicht korrekt.
    Wenn du die rausfiltern willst, müsstest du statt dessen
    elif verwenden und nach kleiner abfragen. wenn beides nicht zutrifft ist es gleich.
    Damit kannst du dann mit else weiternachen.

    Das nur der Genauigkeit wegen. ;)

    Gruß Wolfgang
    PS Freu mich (sicher nicht allein) wenn wenigstens Rückmeldungen kommen.
    Kandidaten, die sich nur schnell anmelden, ihre Frage abdrücken und danach nimmer mehr gesehen werden, mag ich weniger.
     
  8. #7 blueunderground, 15.11.2005
    blueunderground

    blueunderground Mitglied

    Dabei seit:
    13.10.2005
    Beiträge:
    28
    Zustimmungen:
    0
    Habe ich eingebunden, es läuft auch soweit, jetzt habe ich nur das Problem, das wenn ich von GREP keinen Wert also nichts als Ergebnis geliefert bekomme, schlägt die IF-Abfrage natürlich fehl.

    Fall 1:
    grep liefert den Wert 10.0 zurück. ## Das ist ok!

    Fall 2:
    grep liefert den keine Wert zurück, weil das Statement nichts finden (grep'en) kann ## und nu ?


    Mit
    if [ "$zahl" -eq "" ]
    kann ich nicht arbeiten weil er ja eine Integerzahl erwartet :-(


    Danke
    Mit
     
  9. #8 Xanti, 15.11.2005
    Zuletzt bearbeitet: 15.11.2005
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Stimmt, davon gibts leider ziemlich viele :(

    Gruss, Phorus

    edit: @bug *scnr*

    Einfach ein "test -z" vorschalten.
     
  10. #9 Wolfgang, 15.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Noch eine Möglichkeit bietet die bash durch Variablenexpansion an.

    ${var:-default}

    Default-Wert setzen, wenn var nicht gesetzt ist.
    Die Expansion gibt default zurück wenn var nicht gesetzt ist.
    Sonst den Inhalt von var.


    Ist var also leer, könntest du dafür einen String einsetzen und darauf testen.
    Ist aber nicht besser als if [ -z $var ].
    Soll nur als Ergänzung dienen, weil Varablenexpansion in der shell sehr effiziente Möglichkeiten bieten.

    echo ${var:?ich bin leer}
    Gibt "ich bin leer" aus, und lässt var ungesetzt, und bricht das Script ab - wenn var leer ist -!

    Gruß Wolfgang
     
  11. #10 blueunderground, 17.11.2005
    blueunderground

    blueunderground Mitglied

    Dabei seit:
    13.10.2005
    Beiträge:
    28
    Zustimmungen:
    0
    Brauch da noch Verständnishilfe, Wolfgang.
    Wie und wo baue ich das nun in mein Skript ein ?

    Hintergrund des ganzen, es soll überprüft werden ob der Wert den grep an cut übergibt leer ist, wenn grep keine Ergebnisse findet soll ein "leer" ausgegeben werden, ansonsten der gefundene Wert ($zahl), in diesem Fall der Preis.

    Danke
     
  12. #11 Wolfgang, 17.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo Dein if [ test...] ist total daneben. ;)
    die [ repräsentiert das test!
    -z $var
    prüft ob $var leer ist.
    man bash

    .. -z string
    True if the length of string is zero.

    besser
    if [ -z $zahl ]; then ...

    Gruß Wolfgang
     
  13. #12 Xanti, 17.11.2005
    Zuletzt bearbeitet: 17.11.2005
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Der Vollständigkeit halber, obiges ist gleichwertig mit

    Code:
    if test -z $zahl; then ... 
    ... nur um den Zusammenhang zwischen [] und test zu zeigen.

    Gruss, Phorus
     
  14. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  15. #13 blueunderground, 17.11.2005
    blueunderground

    blueunderground Mitglied

    Dabei seit:
    13.10.2005
    Beiträge:
    28
    Zustimmungen:
    0
    OK, Danke !
    Das es jetzt so einfach war habe ich nicht gedacht.
    Das mit [ test -z $var ] statt [ -z $var ] mach ich immer wieder. *nerv*
     
  16. #14 Wolfgang, 17.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Weil wir gerade beim Ergänzen sind ;)
    Um auf meine oben genannte (hier nicht so angebrachte) Variante
    zurückzukommen:
    if [ ${var:?leer} = "leer" ]; then echo "${var:?Ich bin leer}";else echo $var;fi
    Man könnte sich also das if Konstrukt sparen, habe es nur zur Verständigung belassen.
    Hier macht unter Umständen test Sinn.
    test ${var:?leer} = "leer" || echo "${var:?leer}"; hier geht es weiter

    gibt den String "leer" zurück, wenn var nicht gesetzt ist und prüft anschließend auf den String "leer".
    Ist var gesetzt bleibt es erhalten.
    Macht also genau das Gleiche im Ergebnis.

    var wird selbst nicht verändert!

    Nur der Vollständigkeit halber für Leutz die gerne auf String matchen wollen. ;)
    Sinnvoll, weil man gleich Fehlermeldungen damit generiert, ohne diese einer Variablen zuzuweisen.

    Gruß Wolfgang
     
Thema:

Variable über Pipe überprüfen

Die Seite wird geladen...

Variable über Pipe überprüfen - Ähnliche Themen

  1. sed suchen und ersetzen mit Variable übergeben?

    sed suchen und ersetzen mit Variable übergeben?: hallo, ich habe folgenden sed-Befehl, der schon super ist und auch alles tut, was er tun soll, nur eben natürlich das $i einfach hinschreibt...
  2. Inhalt einer Variablen aus Batch an Shellscript übergeben

    Inhalt einer Variablen aus Batch an Shellscript übergeben: Hallo, ich komme einfach nicht drauf. Wie kann ich den Wert aus einer Variablen eines Batches an mein Shellscript übergeben? So? #...
  3. MySQL-Abfrage an Variable übergeben

    MySQL-Abfrage an Variable übergeben: Hallo, ich möchte die Ausgabe einer MySQL-Anfrage zeilenweise auswerten und die darin enthaltenen Werte in ein Template schreiben und gegen...
  4. wie Umgebungsvariablen übergeben

    wie Umgebungsvariablen übergeben: Hallo zusammen, ich brauch mal eure Hilfe, weil ich grad nicht weiterkomme. kurz zum Sachverhalt...es gibt ein Oberprogramm(OP) und ein...
  5. Über Linker Skript externe Variablen übergeben

    Über Linker Skript externe Variablen übergeben: Hi, ich habe mich im Rahmen einer Projektarbeit an der Uni mit der "Linker Command Language" beschäftigt und mit dem Umgang des LD's. Als...