wie kann ich mit Bash zwei Zahlen addieren (subtrahieren usw.)?

wie kann ich mit Bash zwei Zahlen addieren (subtrahieren usw.)?

Ich kann die Zahlen und Operationen einlesen mit:

echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op

aber dann schlagen alle meine Versuche, die Zahlen zu addieren, fehl:

case "$op" in
  "+")
    echo num1+num2;;
  "-")
    echo `num1-num2`;;
esac

Laufen:

First number please
1
Second mumber please
2
Operation?
+

Ausgabe:

num1+num2

...oder...

echo $num1+$num2;;

# results in: 1+2    

...oder...

echo `$num1`+`$num2`;;

# results in: ...line 9: 1: command not found

Scheint, als ob ich möglicherweise immer noch Zeichenfolgen erhalte, wenn ich versuche, „add“ zu addieren („2+2“ statt „4“).

Antwort1

Arithmetik in POSIX-Shellserfolgt mit $und doppelten Klammern (( )):

echo "$(($num1+$num2))"

Sie können daraus Zuweisungen vornehmen. Beachten Sie auch, dass die $Operatoren der darin enthaltenen Variablennamen (())optional sind):

num1="$((num1+num2))"

Es gibt auch expr:

expr $num1 + $num2

Beim Skripting $(())ist dies vorzuziehen, da dadurch ein Fork/Execute für den exprBefehl vermieden wird.

Antwort2

Die vorhandene Antwort ist reines Bash, also ist sie schneller als diese, kann aber nur Ganzzahlen verarbeiten. Wenn Sie Gleitkommazahlen verarbeiten müssen, müssen Sie das externe Programm verwenden bc.

$ echo 'scale=4;3.1415+9.99' | bc
13.1315

Das scale=4gibt an bc, dass vier Dezimalstellen verwendet werden sollen. man bcWeitere Informationen finden Sie unter.

Antwort3

Sie können auch Struktur verwenden $[ ... ]. In diesem Fall verwenden wir den in Bash integrierten Mechanismus, der schneller und etwas bequemer zu verwenden ist. Da wir wissen, dass alles zwischen $[, und ] als Ausdruck behandelt wird, müssen wir den Variablen kein voranstellen $. Ebenso müssen wir nicht verhindern, *dass es wie ein Muster behandelt wird.

num1=2
num2=3
echo $[num1 + num2]
5

Antwort4

minimalistisch

total=0
((total+=qty))

verwandte Informationen