how to declare float?

V

value

Jungspund
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 !!! :))
 
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 ?
 
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!!! =)
 
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

:(
 
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
 
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
 
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
 
Zuletzt bearbeitet:
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..
 
Hi,
nein an meinem verständnis der deklaration lag es nicht sondern am vergleichsoperator. ich wollte ja zwingend integer und dezimalzahl vergleichen..
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
 
Zurück
Oben