comment puis-je append (soustraire, etc.) deux nombres avec bash?

Je peux lire les numbers et l'opération avec:

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

mais alors toutes mes tentatives d'append les numéros échouent:

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

Courir:

 First number please 1 Second mumber please 2 Operation? + 

Sortie:

 num1+num2 

…ou…

 echo $num1+$num2;; # results in: 1+2 

…ou…

 echo `$num1`+`$num2`;; # results in: ...line 9: 1: command not found 

On dirait que j'obtiens encore des strings quand j'essaie d'append add ("2 + 2" au lieu de "4").

L'arithmétique dans les coquilles POSIX se fait avec $ et entre parenthèses:

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

Vous pouvez assigner à partir de cela (sans echo ). Il y a aussi expr :

 expr $num1 + $num2 

Dans scripting $(()) est préférable car il évite un fork / execute pour la command expr .

La réponse existante est purement bash, donc elle sera plus rapide que cela, mais elle ne peut gérer que des entiers. Si vous avez besoin de gérer des flottants, vous devez utiliser le programme externe bc .

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

L' scale=4 indique à bc d'utiliser quatre décimales. Voir man bc pour plus d'informations.

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

Notez le \ avant le * (pour la multiplication), l'expression entière doit être dans les backquotes `.

minimalist

 total=0 ((total+=qty))