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

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von blck, 17.04.2007.

  1. blck

    blck Routinier

    Dabei seit:
    15.01.2007
    Beiträge:
    268
    Zustimmungen:
    0
    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
     
  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 Fallout, 17.04.2007
    Fallout

    Fallout Doppel-As

    Dabei seit:
    02.03.2007
    Beiträge:
    120
    Zustimmungen:
    0
    Hi,

    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
     
  4. blck

    blck Routinier

    Dabei seit:
    15.01.2007
    Beiträge:
    268
    Zustimmungen:
    0
    Nö,,, dann passiert dasselbe!
    Gruß Blck
     
  5. #4 Wolfgang, 17.04.2007
    Zuletzt bearbeitet: 17.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
  6. reni

    reni Guest

    if und do passen nicht zusammen
    Wenn dann if und then.
     
  7. #6 Fallout, 17.04.2007
    Zuletzt bearbeitet: 17.04.2007
    Fallout

    Fallout Doppel-As

    Dabei seit:
    02.03.2007
    Beiträge:
    120
    Zustimmungen:
    0
    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:
    Achte auch darauf, den blank zwischen den Klammern und den Operanden einzuhalten.

    Gruß Daniel
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 blck, 17.04.2007
    Zuletzt bearbeitet: 17.04.2007
    blck

    blck Routinier

    Dabei seit:
    15.01.2007
    Beiträge:
    268
    Zustimmungen:
    0
    ich bins nochmal....
    Hab diesmal ein Problem mit dem bc befehl...
    wenn ich schreibe:
    dann bekomme ich:
    Gruß Blck
     
  10. #8 Wolfgang, 17.04.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
Thema:

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