Bashskript - Operator erwartet

Gast #4824170
Lesenswert?

Hallo zusammen.

Ich fange gerade mit einem ganz simplen Bashskript an, welches zwei 
Übergabeparameter addieren und diese dann mittels Echo in der Konsole 
ausgeben soll.
1
#!/bin/bash
2

3
let ergebnis = $1+$2
4
echo $1 plus $2 ist $ergebnis

Beim Ausführen des Skripts erhalte ich jedoch folgende Fehlermeldung:

>pi@JK_RPi3:~/Desktop $ sudo ./addiere.sh 4 3

>./addiere.sh: Zeile 3: let: =: Syntax Fehler:
>Operator erwartet.(Fehlerverursachendes Zeichen ist \"=\").
>./addiere.sh plus 4 ist


Könntet ihr mir sagen, wo das Problem liegt?

Danke im Voraus!

Gruß
Gast #4824365
Lesenswert?

Ah super, vielen Dank!

Erscheint mir zwar nicht logisch, weshalb da die Leerzeichen stören 
(andere Programmiersprachen bis auf Python interessiert das ja auch 
nicht), aber gut...

Wieder was dazugelernt!
Gast #4824396
Lesenswert?

> Erscheint mir zwar nicht logisch, weshalb da die Leerzeichen stören
> (andere Programmiersprachen bis auf Python interessiert das ja auch
> nicht), aber gut...

shells (sh, ksh, bash & Co.) und deren Syntax hat einige Jahrzehnte mehr 
auf dem Buckel als Python: damals waren nebst den EDV-mässigen 
Möglichkeiten auch die Geschmäcker anders; s. auch Frisuren und 
Kleider...   =:-o
Moderator #4824428
Lesenswert?

JK schrieb:
> Erscheint mir zwar nicht logisch, weshalb da die Leerzeichen stören

das let-Kommando erlaubt mehrere Argumente wie bspw. in

1
$ let a=3 b=4 c=5
2
$ echo $a $b $c
3
3 4 5

Wenn man innerhalb der einzelnen Ausdrücke Leerzeichen verwenden möchte,
muss man sie in Anführungszeichen setzen, damit sie jeweils als ein
einzelnes Argument interpretiert werden. Folgendes wäre also ebenfalls
korrekt:

1
$ let "a = 3" "b = 4" "c = 5"
2
$ echo $a $b $c
3
3 4 5

Es bietet sich generell an, die Argumente von let in Anführungszeichen
zu schreiben, sonst wundert man sich irgendwann einmal über seltsame
Dinge.

Probier mal folgendes:

1
$ touch a=345

Und dann:

1
$ let "a=3*5"
2
$ echo $a
3
15

Bis hierher ist noch alles in Ordnung. Jetzt lässt du die
Anführungszeichen weg:

1
$ let a=3*5
2
$ echo $a
3
345

Huch?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren