Comment ajouter des chiffres dans un script bash ?

J'ai ce script bash et j'ai eu un problème à la ligne 16. Comment puis-je prendre le résultat précédent de la ligne 15 et l'ajouter à la variable de la ligne 16 ?

#!/bin/bash

num=0
metab=0

for ((i=1; i<=2; i++)); do       
    for j in `ls output-$i-*`; do
        echo "$j"

        metab=$(cat $j|grep EndBuffer|awk '{sum+=$2} END { print sum/120}') (line15)
        num= $num + $metab   (line16)
    done
    echo "$num"
 done

Pour les entiers :

  • Utilisez [l'expansion arithmétique][1] : $((EXPR))

      num=$((num1 + num2))
      num=$(($num1 + $num2))       # fonctionne aussi
      num=$((num1 + 2 + 3))        # ...
      num=$[num1+num2] # ancienne syntaxe d'expression arithmétique dépréciée
  • Utilisation de l'utilitaire externe expr. Notez que ceci n'est nécessaire que pour les très vieux systèmes.

      num=``expr $num1 + $num2` # l'espacement pour expr est important

Pour la virgule flottante :

Bash ne le prend pas directement en charge, mais il existe quelques outils externes que vous pouvez utiliser :

num=$(awk "BEGIN {print $num1+$num2; exit}")
num=$(python -c "print $num1+$num2")
num=$(perl -e "print $num1+$num2")
num=$(echo $num1 + $num2 | bc)   # whitespace for echo is important

Vous pouvez également utiliser la notation scientifique (par exemple : 2.5e+2)


Ecueils courants :

  • Lorsque vous définissez une variable, vous ne pouvez pas avoir d'espace de part et d'autre de =, sinon cela forcera le shell à interpréter le premier mot comme le nom de l'application à exécuter (ex : num= ou num).

    num= 1 num =2

  • bc et expr attendent chaque nombre et opérateur comme un argument séparé, donc l'espacement est important. Ils ne peuvent pas traiter des arguments comme 3+ +4.

    num=`expr $num1+ $num2`

    [1] : http://tldp.org/LDP/abs/html/arithexp.html

Commentaires (10)

Utilisez l'expansion arithmétique $(( )).

num=$(( $num + $metab ))

Voir http://tldp.org/LDP/abs/html/arithexp.html pour plus d'informations.

Commentaires (2)

Il y a mille et une façons de le faire. En voici une qui utilise dc :


dc 
Commentaires (1)