Forum: PC-Programmierung Bashskript - Operator erwartet


von JK (Gast)


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ß

von g457 (Gast)


Lesenswert?

1
$ cat addiere.sh 
2
#!/bin/bash
3
4
let ergebnis=$1+$2
5
echo $1 plus $2 ist $ergebnis
6
7
$ ./addiere.sh 4 3
8
4 plus 3 ist 7

HTH

von Peter.N (Gast)


Lesenswert?

eben, lass die Leerzeichen weg...

von michael (Gast) (Gast)


Lesenswert?

Lass die Leerzeichen weg:
1
let ergebnis=$1+$2

von (prx) A. K. (prx)


Lesenswert?

Jedes Argument von let muss jeweils ein vollständiger Ausdruck sein. 
Dein
  let ergebnis = $1+$2
entspricht also
  let ergebnis
  let =
  let $1+$2
und das ist natürlich Unsinn. So gehts aber:
  let "ergebnis = $1+$2"

: Bearbeitet durch User
von JK (Gast)


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!

von shellmichmal (Gast)


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

von Yalu X. (yalu) (Moderator)


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?

: Bearbeitet durch Moderator
von JK (Gast)


Lesenswert?

Ok Danke für die ausführliche Erklärung!

von Rolf M. (rmagnus)


Lesenswert?

JK schrieb:
> 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...

Python auch nicht. Ob ich da schreibe
1
ergebnis=a+b
oder
1
ergebnis       =                          a     +  b

macht keinen Unterschied.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.