how to declare float?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von value, 18.12.2009.

  1. value

    value Jungspund

    Dabei seit:
    18.12.2009
    Beiträge:
    15
    Zustimmungen:
    0
    Hallo zusammen!

    Ich bin absoluter Neuling im Umgang mit der Shell und habe folgendes Problem:
    Wie deklariere ich eine variable als float oder double also kommazahl? Habe mich deswegen schon dumm und dämlich gesucht... :(

    Es geht um folgende Zeile meines Programms:

    declare -i load=$(uptime | awk '{ print $9 }')

    Ich habe bereits bemerkt, dass es mit -a funktioniert aber die variable als array zu deklarieren wird wohl nicht im sinne des erfinders sein.. oder?

    Desweiteren beinhaltet mein Program im weiteren Verlauf noch einen Vergleich mit einer übergebenen integer-variable, womit ich mein nächstes Problem habe und weswegen die array lösung nicht zufriedenstellend ist :think: ...:

    if [ $load -gt $warn ] ; then [...]



    Wäre super nett wenn mir jemand helfen könnte! :hilfe2: :headup:

    Vielen Dank vorab !!! :))
     
  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. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    die Shell kennt keine Typisierung in dem Sinne wie du Sie von C oder Java kenst.
    Eine Variable ist wie bei vielen Sprachen (ruby, perl, phyton usw.) nur ein Object und es wird später entschieden was da nun drin ist.

    Außerdem welche Shell nutzt du eigentlich ?

    und was für ein Fehler kommt denn bei deiner if clausel ?
     
  4. value

    value Jungspund

    Dabei seit:
    18.12.2009
    Beiträge:
    15
    Zustimmungen:
    0
    Hi!

    ich nutze bash.

    also wenn ich die variable mit -i deklariere bekomme ich:
    ./[...].sh: line 86: declare: 0.18,: syntax error: invalid arithmetic operator (error token is ".18,")

    hier will ich eine kommazahl als integer deklarieren

    und folgendes erscheint wenn ich es mit -a probiere:
    ./[...].sh: line 100: [: 0.20,: integer expression expected
    ./[...].sh: line 101: [: 0.20,: integer expression expected


    Hier scheint der angesprochene Vergleich nicht zu funktionieren (if [...])...


    danke schonmal!!! =)
     
  5. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    Versuchs doch mal mit

    Code:
    load=$(uptime | awk '{ print $9 }')
    
    aufzuruchen mit $load
     
  6. value

    value Jungspund

    Dabei seit:
    18.12.2009
    Beiträge:
    15
    Zustimmungen:
    0
    dank dir aber leider besteht weiterhin das problem dass der vergleich mit der übergebenen variable nicht funktionert.

    selbst wenn ich da im vorfeld auch das declare weglasse...

    -> integer expression expected

    :(
     
  7. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    was heißt diese Fehlermeldung?
    Ja ... es wird ein Int. erwartet, haste mal nachgesehen was in den beiden Variablen drin steht ?
    Evtl. versuchst du ja Birnen mit Äpfel zu vergleichen ? :P
     
  8. value

    value Jungspund

    Dabei seit:
    18.12.2009
    Beiträge:
    15
    Zustimmungen:
    0
    na klar. hab ich doch bereits erwähnt:

    fehler:
    ./[...].sh: line 100: [: 0.20,: integer expression expected
    ./[...].sh: line 101: [: 0.20,: integer expression expected

    der vergleich:
    if [ $load -gt $warn ] ; then [...]

    load enthält ne zahl wie 1.11 und als warn wird zB 3 übergeben
     
  9. #8 bytepool, 18.12.2009
    Zuletzt bearbeitet: 18.12.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    das Problem liegt nicht an der Deklaration der Variablen, sondern daran dass -gt von test Integer Parameter erwartet, so wie es da auch steht. Du suchst:

    Code:
    if [[ $load > $warn ]]; echo yes; fi
    
    Edit:
    Nur um das nochmal ganz deutlich zu sagen, falls daran dein Verstaendnis scheitert, ein Integer ist eine ganze Zahl, keine Dezimalzahl.

    mfg,
    bytepool
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. value

    value Jungspund

    Dabei seit:
    18.12.2009
    Beiträge:
    15
    Zustimmungen:
    0
    danke damit passt es!
    nein an meinem verständnis der deklaration lag es nicht sondern am vergleichsoperator. ich wollte ja zwingend integer und dezimalzahl vergleichen..
     
  12. #10 bytepool, 18.12.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,
    Ich wuerde das eigentlich ein Verstaendnis Problem nennen, da das per Definition nicht funktionieren kann. ;)

    Nur um da nochmal kurz drauf hinzuweisen, [ ] und [[ ]] ist nicht das gleiche, es hat sich also nicht nur der Vergleichsoperator veraendert.

    mfg,
    bytepool
     
Thema:

how to declare float?

Die Seite wird geladen...

how to declare float? - Ähnliche Themen

  1. Float

    Float: void dividieren(){ float term1,term2; printf("\n\nWert, der dividiert wird:"); scanf("%f", &term1);...
  2. "floating point exception" bei Qt-Anwendungen

    "floating point exception" bei Qt-Anwendungen: Hallo ich verwende Gnome 2.14.3 System: Debian GNU/Linux 4.0 Kernel: 2.6.18-3-686 #1 SMP (also nicht selber kompiliert) X Window System Version...
  3. Warum wird im Linuxkernel kein floating point verwendet?

    Warum wird im Linuxkernel kein floating point verwendet?: Ich habe mir das Makefile vom kernel (Gentoo 2.6.16-r9) mal angesehen. Dort wird dann mmx, sse, sse2 und 3dnow als Compilerflag abgeschaltet....