Bashskript - Operator erwartet

Gast #4824170
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
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
> 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
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?
#4824567
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.