GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Beginner Series #5 :Utilisation des opérateurs arithmétiques dans les scripts Bash

Faisons quelques calculs bash !

Lors de l'écriture de vos scripts bash, vous aurez souvent envie de comprendre le résultat d'un calcul arithmétique pour déterminer l'espace disque restant, la taille des fichiers, les dates d'expiration des mots de passe, le nombre d'hôtes, la bande passante du réseau, etc.

Dans ce chapitre de la série bash pour débutants, vous apprendrez à utiliser les opérateurs bash pour effectuer divers calculs arithmétiques.

Pour vous rafraîchir la mémoire, voici les opérateurs arithmétiques en bash :

Opérateur Description
+ Ajout
- Soustraction
* Multiplication
/ Division entière (sans nombres décimaux)
% Division du module (ne donne que le reste)
** exponentiation (x à la puissance y)

Exécuter l'addition et la soustraction dans les scripts bash

Créons un script bash nommé addition.sh qui ajoutera simplement deux tailles de fichier (en octets) et affichera la sortie.

Vous devez maintenant être familiarisé avec les arguments des scripts bash. J'espère que vous connaissez également les commandes cut et du.

La commande du vous donne la taille du fichier avec . La sortie contient à la fois la taille du fichier et le nom du fichier. C'est là que la commande cut est utilisée pour extraire la première colonne (c'est-à-dire la taille du fichier) de la sortie. La sortie de la commande du est transmise à la commande cut à l'aide de la redirection de canal.

Voici le script :

#!/bin/bash

fs1=$(du -b $1 | cut -f1)
fs2=$(du -b $2 | cut -f1)

echo "File size of $1 is: $fs1"
echo "File size of $2 is: $fs2"

total=$(($fs1 + $fs2))

echo "Total size is: $total"

Notez que vous passerez les deux noms de fichiers comme arguments au script. Par exemple, ici je lance le script et passe les deux fichiers /etc/passwd et /etc/group comme arguments :

[email protected]:~/scripts$ ./addition.sh /etc/passwd /etc/group
File size of /etc/passwd is: 2795
File size of /etc/group is: 1065
Total size is: 3860

La ligne la plus importante dans addition.sh le script est :

total=$(($fs1 + $fs2))

Où vous avez utilisé l'opérateur + pour additionner les deux nombres $fs1 et $fs2. Notez également que pour évaluer toute expression arithmétique, vous devez mettre entre doubles parenthèses comme suit :

$((arithmetic-expression))

Vous pouvez également utiliser l'opérateur moins (-) pour la soustraction. Par exemple, la valeur de la sous-variable dans l'instruction suivante donnera sept :

sub=$((10-3))

Exécuter la multiplication et la division dans les scripts bash

Créons un script bash nommé giga2mega.sh qui convertira les gigaoctets (Go) en mégaoctets (Mo) :

#!/bin/bash

GIGA=$1
MEGA=$(($GIGA * 1024))

echo "$GIGA GB is equal to $MEGA MB"

Exécutons maintenant le script pour savoir combien de mégaoctets il y a dans quatre gigaoctets :

[email protected]:~/scripts$ ./giga2mega.sh 4
4 GB is equal to 4096 MB

Ici, j'ai utilisé l'opérateur de multiplication (*) pour multiplier le nombre de gigaoctets par 1024 pour obtenir l'équivalent en mégaoctets :

MEGA=$(($GIGA * 1024))

Il est facile d'ajouter plus de fonctionnalités à ce script pour convertir des gigaoctets (Go) en kilooctets (Ko) :

KILO=$(($GIGA * 1024 * 1024))

Je vais vous laisser convertir des gigaoctets en octets en guise d'exercice !

Vous pouvez également utiliser l'opérateur de division (/) pour diviser deux nombres. Par exemple, la valeur de la variable div dans l'instruction suivante sera évaluée à cinq :

div=$((20 / 4))

Notez qu'il s'agit d'une division entière et que toutes les fractions sont donc perdues. Par exemple, si vous divisez 5 par 2, vous obtiendrez 2, ce qui est évidemment incorrect :

[email protected]:~/scripts$ div=$((5 / 2))
[email protected]:~/scripts$ echo $div
2

Pour obtenir une sortie décimale ; vous pouvez utiliser le bc commande. Par exemple, pour diviser 5 par 2 avec le bc commande, vous pouvez utiliser l'instruction suivante :

echo "5/2" | bc -l
2.50000000000000000000

Notez que vous pouvez également utiliser d'autres opérateurs avec le bc commande chaque fois que vous avez affaire à des nombres décimaux :

Utilisation de la puissance et du reste (modulo)

Créons un calculateur de puissance ! Je vais créer un script nommé power.sh qui acceptera deux nombres un et b (comme arguments) et il affichera le résultat de un élevé à la puissance b :

#!/bin/bash
a=$1
b=$2
result=$((a**b))
echo "$1^$2=$result"

Notez que j'utilise l'opérateur d'exponentiation (**) pour calculer le résultat de a élevé à la puissance b .

Faisons quelques exécutions du script pour nous assurer qu'il donne les bonnes réponses :

[email protected]:~/scripts$ ./power.sh 2 3
2^3=8
[email protected]:~/scripts$ ./power.sh 3 2
3^2=9
[email protected]:~/scripts$ ./power.sh 5 2
5^2=25
[email protected]:~/scripts$ ./power.sh 4 2
4^2=16

Vous pouvez également utiliser l'opérateur modulo (%) pour calculer les restes entiers. Par exemple, la valeur du rem variable dans l'instruction suivante sera évaluée à 2 :

rem=$((17%5))

Le reste ici est 2 car 5 rentre trois fois dans 17, et il en reste 2 !

Pratique :créer un script bash de conversion de diplômes

Terminons ce tutoriel en créant un script nommé c2f.sh qui convertira les degrés Celsius en degrés Fahrenheit en utilisant l'équation ci-dessous :

F = C x (9/5) + 32

Ce sera un bon exercice pour vous d'essayer les nouvelles choses que vous venez d'apprendre dans ce tutoriel bash.

Voici une solution (il peut y avoir plusieurs façons d'obtenir le même résultat) :

#!/bin/bash

C=$1
F=$(echo "scale=2; $C * (9/5) + 32" | bc -l)

echo "$C degrees Celsius is equal to $F degrees Fahrenheit."

J'ai utilisé le bc commande car nous avons affaire à des décimales et j'ai également utilisé "scale =2" pour afficher la sortie en deux décimales.

Effectuons quelques exécutions du script pour nous assurer qu'il produit les bons résultats :

[email protected]:~/scripts$ ./c2f.sh 2
2 degrees Celsius is equal to 35.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh -3
-3 degrees Celsius is equal to 26.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh 27
27 degrees Celsius is equal to 80.60 degrees Fahrenheit.

Parfait! Cela nous amène à la fin de ce tutoriel. Pratiquez ce que vous avez appris en téléchargeant l'ensemble d'exercices bash de ce chapitre.

Bash Chapter 5 Practice QuestionsProblems et leur solution pour mettre en pratique ce que vous venez d'apprendre dans ce chapitreBash-Chapter-5-Practice-Questions-Linux-Handbook.pdf32 KB

J'espère que vous avez aimé faire des maths avec bash et restez à l'écoute pour le prochain tutoriel de la série bash pour débutants car vous apprendrez à manipuler les chaînes !


Linux
  1. Bash Beginner Series #9 :Utiliser des fonctions dans Bash

  2. Bash Beginner Series #8 :Boucles dans Bash

  3. rechercher et copier un fichier à l'aide de Bash

  4. Comment remplacer les espaces dans les noms de fichiers à l'aide d'un script bash

  5. Obtenir mtime d'un fichier spécifique en utilisant Bash ?

Script bash (III)

Bash Beginner Series #2 :Comprendre les variables dans les scripts shell Bash

Bash Beginner Series #4 :Utiliser des tableaux dans Bash

Bash Beginner Series #3 :Passer des arguments aux scripts Bash

Bash Beginner Series #6 :Opérations sur les chaînes dans Bash

Bash Beginner Series #10 :Automatisation avec Bash