it-swarm.com.de

Wie kann ich mit bash zwei Zahlen addieren (subtrahieren usw.)?

Ich kann die Zahlen und die Operation 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 hinzuzufügen, fehl:

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

Lauf:

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 würde ich vielleicht immer noch Strings bekommen, wenn ich versuche, add hinzuzufügen ("2 + 2" anstelle von "4").

106
Michael Durrant

Arithmetik in POSIX-Shells erfolgt mit $ Und doppelten Klammern (( )):

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

Sie können daraus zuweisen (ohne echo):

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

Es gibt auch expr:

expr $num1 + $num2

Bei der Skripterstellung ist $(()) vorzuziehen, da ein Fork/Execute für den Befehl expr vermieden wird.

148
goldilocks

Die vorhandene Antwort ist Pure Bash, daher ist sie schneller als diese, kann jedoch nur Ganzzahlen verarbeiten. Wenn Sie Floats verarbeiten müssen, müssen Sie das externe Programm bc verwenden.

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

Das scale=4 weist bc an, vier Dezimalstellen zu verwenden. Sehen man bc für mehr Informationen.

15
evilsoup
echo `expr $a + $b`   
echo `expr $a - $b`   
echo `expr $a \* $b`   
echo `expr $a / $b`   

Beachten Sie das \ Vor dem * (zur Multiplikation) muss der gesamte Ausdruck innerhalb der Backquotes stehen `.

5
Himani

Sie können auch die Struktur $[ ... ] Verwenden. In diesem Fall verwenden wir die in Bash integrierte Mechanik, die schneller und bequemer zu bedienen ist. Da wir wissen, dass alles zwischen $ [und] als Ausdruck behandelt wird, müssen wir den Variablen nicht $ Voranstellen. Ebenso müssen wir * Nicht davor schützen, es wie ein Muster zu behandeln.

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

minimalistisch

total=0
((total+=qty))
2
geekzspot

Basierend auf der Reihenfolge der Eingaben, die Sie vom Benutzer anfordern, verwenden Sie anscheinend mgekehrte polnische Notation.

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

Sie können es besser machen, dc (Tischrechner) direkt zu verwenden, da dies der Zweck ist.

DESCRIPTION
       Dc is a reverse-polish desk calculator which supports unlimited pre-
       cision arithmetic.

Beispielsitzung mit dc:

$ dc
1 2 + p    # This part is typed; the result comes next.
3
q  # This is also typed.
$

Oder nicht interaktiv:

$ dc -e '1 2 + p'
3
$
0
Wildcard