GNU/Linux >> Tutoriels Linux >  >> Linux

Comment évaluer les chaînes en tant que nombres dans Bash

Comme tout est fichier sous Linux, tout est chaîne sous bash.

Oui! Techniquement, il n'y a pas de types de données dans Bash. Essentiellement, les variables Bash ne sont que des chaînes de caractères.

Et cela crée un problème lorsque vous essayez d'effectuer des opérations arithmétiques dans bash. Les nombres que vous essayez d'ajouter vous donnent des résultats bizarres.

[email protected]:~$ sum=3+6
[email protected]:~$ echo $sum
3+6

Pour convertir des chaînes en entiers dans bash, enveloppez-les dans $((X)). Comme ceci :

$((string))

Si la chaîne a un numéro identifiable, elle sera traitée comme un numéro. L'exemple que j'ai montré ci-dessus peut être corrigé comme :

[email protected]:~$ sum=$((3+6))
[email protected]:~$ echo $sum
9
Tout ce que vous faites dans $((...)) est considéré comme une opération arithmétique.

Voyons un peu plus en détail la conversion des chaînes en nombres afin que vous puissiez utiliser les calculs arithmétiques en bash.

Convertir des variables de chaîne en nombres

Déclarons quelques "nombres" qui sont essentiellement des chaînes de caractères.

[email protected]:~$ a=11
[email protected]:~$ b=3

Vous pouvez vérifier le numéro attribué :

[email protected]:~$ echo $a
11
[email protected]:~$ echo $b
3

Essayons maintenant d'additionner les deux nombres et de stocker la valeur dans une troisième variable c :

[email protected]:~$ c=$a+$b
[email protected]:~$ echo $c
11+3

Comme vous pouvez le voir sur la sortie ci-dessus, c est également traité comme une chaîne.

Pour réussir l'addition, vous devez la "convertir" par une expansion arithmétique :

[email protected]:~$ c=$(($a+$b))
[email protected]:~$ echo $c
14

Notez que c est toujours en fait une chaîne, jusqu'à ce que vous réutilisiez implicitement le même développement arithmétique pour une autre opération dont je parlerai plus tard.

[email protected]:~$ c=$((5))

Ce qui précède est équivalent à :

[email protected]:~$ c=5

Utilisons une troisième variable d pour une autre opération :

[email protected]:~$ d=10

Toutes ces déclarations implicites sont toujours des chaînes. C'est la même chose que la façon dont j'avais défini a et b plus tôt.

Passons maintenant à la seconde opération :

[email protected]:~$ e=$(($a+$b*$c-$d))
[email protected]:~$ echo $e
16

Dans l'expression ci-dessus, le produit de b et c est calculé en premier et enfin l'addition et la soustraction suivent.

Comme je l'ai mentionné précédemment, tout ce que vous faites entre $((...)) est considéré comme une opération arithmétique.

Toute cette conversion fonctionne pour les entiers. Cela ne fonctionnera pas avec des virgules flottantes, c'est-à-dire des nombres avec des virgules décimales.

Essayez de mélanger des chaînes et des nombres réels

Mélanger des chaînes et des nombres entiers est toujours plus sûr que de mélanger du coca et de la menthe. Cela produit cependant un résultat étrange.

[email protected]:~$ sum=$((3+hello))
[email protected]:~$ echo $sum
3

Cela ne fonctionnera que lorsqu'il y a des nombres (sous forme de chaîne). S'il s'agit d'une chaîne de caractères pure, elle ne sera pas convertie par magie en certains nombres. Au lieu de cela, il est ignoré comme vous pouvez le voir dans l'exemple ci-dessus.

Méthode alternative :utilisez expr

Vous pouvez également utiliser le expr outil pour faire l'évaluation, mais notez qu'il ne s'agit pas d'une procédure Bash "native", car vous devez disposer de coreutils installé (par défaut sur Ubuntu) en tant que package séparé.

[email protected]:~$ expr $a + $b \* $c - $d
16

J'espère que ce petit tutoriel rapide vous a aidé à évaluer les chaînes bash en tant que nombres. Si vous avez des questions ou des suggestions, n'hésitez pas à laisser un commentaire ci-dessous.


Linux
  1. Comment écrire une boucle dans Bash

  2. Comment comparer des nombres et des chaînes dans le script shell Linux

  3. Comment détecter Bash>=4.0 ?

  4. BASH :comment effectuer de l'arithmétique sur des nombres dans un tube

  5. Pourquoi les noms d'utilisateur Linux ne peuvent-ils pas commencer par des chiffres ?

Chaînes de concaténation bash

Comment comparer des chaînes dans Bash

Comment utiliser bash if -z et if -n pour tester des chaînes sous Linux

Comment afficher l'historique de Bash sans numéros de ligne

Comment exécuter un script bash

Différence entre les guillemets simples et doubles dans Bash Shell