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))