if [ "$quadrat" -eq "$subtrahierte" ]; do

blck

blck

Routinier
N'abend allerseits... seit mir nicht böse wenn das ne dumme Frage werden sollte, denn 1) ich bin anfänger 2) ICh sitze schon ewig dran
Was ist daran falsch?

Wenn ich in meinem Skript schreibe:
if [ "$quadrat" -eq "$subtrahierte" ]; do
ergebnis=1
fi

Dann bekomm ich von der Shell die Antwort:
Mathe.sh: line 20: syntax error near unexpected token `do'
Mathe.sh: line 20: `if [ "sqrt($quadrat)" -eq "sqrt($subtrahierte)" ]; do'

:::::
In $quadrat und in $subtrahierte stehen Zahlen deswegen ja eig -eq

Gruß blck
 
Hi,

if [ "$quadrat" -eq "$subtrahierte" ]; do
ergebnis=1
fi

Mit den doppelten Anführungszeichen zwingst Du die Variable in einen String. `-eq` Vergleicht jedoch nur Numerische oder Bool'sche (glaube ich zumindest ;-P) Werte miteinander.
Es sollte funktionieren, wenn Du die Anführungszeichen wegläßt.

Gruß Daniel
 
Hallo
Schau mal genau hin:
Code:
if [ "$quadrat" -eq "$subtrahierte" ]; [b]then[/b]
...

Du hast then vergessen.
Ist mir auch schon passiert. ;)

EDTI:
Die Doppelten Anführungszeichen sind richtig.
Besser noch ein x davor, dann geht es nicht in die Hose wenn einer der beiden Var leer ist.
-eq ist numerisch
= ist String

Also wenn sicher ist, dass numerisch verglichen wird dann ist das so richtig.
Es sollte aber darauf geachtet werden, dass die Variablen vorher initialisiert werden, damit sie nie leer sind.
Bei Stringvergleich hilft ein Trick:

Code:
if [ x"$quadrat" =  x"$subtrahierte"  ]; then
Im Falle von zwei leeren String wird x = x und es ist gleich

Sonst würde die bash das zu

if [ = ] expandieren und du bekommst einen Fehler.

Gruß Wolfgang
 
Zuletzt bearbeitet:
Edit: Oha. Das mit dem `do` ist mir leider auch nicht aufgefallen.
Was hier drunter steht einfach ignorieren :brav:

Dann gehe ich mal davon aus, daß es sich um eine Eigenheit Deiner noch nicht genannten Shell(version) handelt.

Bei mir (mit GNU bash 3.00.16(1)) funktioniert das:
fallout@server:~> a=5; b=7
fallout@server:~> if [ "$a" -eq "$b" ]; then echo ok; fi
fallout@server:~> b=5
fallout@server:~> if [ "$a" -eq "$b" ]; then echo ok; fi
ok

Achte auch darauf, den blank zwischen den Klammern und den Operanden einzuhalten.

Gruß Daniel
 
Zuletzt bearbeitet:
ich bins nochmal....
Hab diesmal ein Problem mit dem bc befehl...
wenn ich schreibe:
einsacht=1.8
sechzen=16
let zahlmaleinsacht=$(echo "scale=5 ; $einsacht*$zahl" | bc -l)
let subtrahierte=$(echo "scale=5 ; $sechzehn-$zahlmaleinssacht" | bc -l )
dann bekomme ich:
Mathe.sh: line 30: let: zahlmaleinsacht=18.0: syntax error in expression (error token is ".0")
(standard_in) 2: parse error
Mathe.sh: line 31: let: subtrahierte=: syntax error: operand expected (error token is "=")
Gruß Blck
 
Zuletzt bearbeitet:
Hallo
Warum verwendest du dort let.
let erwartet einen arithmetischen Ausdruck im Integerbereich und kein Ergebnis.

Code:
zahlmaleinsacht=$(echo "scale=5 ; $einsacht*$zahl" | bc -l)

Gruß Wolfgang
 

Ähnliche Themen

skript zum löschen doppelter dateien

Shell if-Abfrage mit equal or greater wirft Fehlermeldung unary operator expected

Last mit etc/passwd anzeigen lassen

bash: Fehlermeldung und Werte in Array sortieren?

Neuling braucht Hilfe bei for schleife

Zurück
Oben