Comparer des tableaux en Shell

ShellBeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous allez apprendre à comparer des tableaux à l'aide de scripts Shell. Les tableaux sont des structures de données très utiles pour stocker plusieurs valeurs, et leur comparaison est une tâche courante en programmation. Vous travaillerez avec trois tableaux distincts et développerez un script capable d'extraire les éléments communs à l'ensemble de ces listes. Ce processus vous permettra de maîtriser la manipulation des tableaux, l'usage des boucles et les instructions conditionnelles en Shell.

Créer le fichier de script

Pour commencer, créons un nouveau fichier pour héberger notre script.

  1. Ouvrez un terminal dans l'interface WebIDE. Vous devriez voir une invite de commande se terminant par le symbole $.

  2. Naviguez vers le répertoire du projet :

cd ~/project

Cette commande change votre répertoire actuel pour le dossier du projet. Le symbole ~ représente votre répertoire personnel (home), et /project est un sous-dossier situé à l'intérieur.

  1. Créez un nouveau fichier nommé array-comparison.sh :
touch array-comparison.sh

La commande touch crée un fichier vide. Si le fichier existe déjà, elle met simplement à jour sa date de modification sans altérer son contenu.

  1. Ouvrez le fichier dans l'éditeur de la WebIDE. Vous pouvez le faire en cliquant sur le nom du fichier dans l'explorateur de fichiers situé sur le côté gauche de l'interface.

Ajouter le shebang et initialiser les tableaux

Commençons maintenant la rédaction de notre script en ajoutant la ligne shebang et en initialisant nos tableaux de données.

  1. Ajoutez le contenu suivant dans le fichier array-comparison.sh :
#!/bin/bash

## Initialize the arrays
a=(3 5 8 10 6)
b=(6 5 4 12)
c=(14 7 5 7)

Analysons ces lignes :

  • La première ligne #!/bin/bash est appelée "shebang". Elle indique au système d'utiliser l'interpréteur Bash pour exécuter ce script. Cette ligne est indispensable pour tout script Shell.
  • Nous initialisons ensuite trois tableaux : a, b et c. En Bash, les tableaux sont définis en entourant les éléments de parenthèses () et en les séparant par des espaces.
  • Chaque tableau contient différentes valeurs entières. Nous utiliserons ces données pour identifier les éléments communs.

Implémenter la première boucle de comparaison

Mettons en place la première boucle de comparaison pour trouver les éléments communs entre les tableaux a et b.

Ajoutez le code suivant à votre script :

## Initialize an array to store common elements between a and b
z=()

## Compare arrays a and b
for x in "${a[@]}"; do
  for y in "${b[@]}"; do
    if [ $x = $y ]; then
      z+=($x)
    fi
  done
done

echo "Common elements between a and b: ${z[@]}"

Explications détaillées du code :

  • z=() initialise un tableau vide nommé z destiné à stocker les éléments communs trouvés.
  • for x in "${a[@]}" est une boucle qui parcourt chaque élément du tableau a. La syntaxe "${a[@]}" permet de déployer tous les éléments du tableau.
  • Nous utilisons ensuite une boucle imbriquée for y in "${b[@]}" qui parcourt chaque élément du tableau b.
  • if [ $x = $y ] vérifie si l'élément actuel de a est identique à l'élément actuel de b.
  • S'ils sont égaux, nous ajoutons cet élément au tableau z via la commande z+=($x).
  • Enfin, nous affichons les éléments communs avec echo "Common elements between a and b: ${z[@]}". La syntaxe ${z[@]} affiche l'intégralité du contenu du tableau z.

Implémenter la seconde boucle de comparaison

À présent, implémentons la seconde boucle pour comparer le tableau c avec les éléments communs précédemment identifiés et stockés dans le tableau z.

Ajoutez le code suivant à la suite de votre script :

## Initialize an array to store common elements among a, b, and c
j=()

## Compare array c with the common elements found in z
for i in "${c[@]}"; do
  for k in "${z[@]}"; do
    if [ $i = $k ]; then
      j+=($i)
    fi
  done
done

echo "Common elements among a, b, and c: ${j[@]}"

Ce bloc de code est similaire au précédent, avec quelques ajustements clés :

  • Nous initialisons un nouveau tableau vide j pour stocker les éléments communs finaux.
  • La boucle externe for i in "${c[@]}" parcourt les éléments du tableau c.
  • La boucle interne for k in "${z[@]}" parcourt les éléments communs que nous avons trouvés entre a et b (stockés dans z).
  • Nous comparons les éléments de c avec ceux de z. En cas de correspondance, l'élément est ajouté au tableau j.
  • Enfin, nous affichons les éléments communs aux trois tableaux.

Rendre le script exécutable et le lancer

Maintenant que notre script est terminé, nous devons lui donner les droits d'exécution et le tester.

  1. Dans le terminal, rendez le script exécutable :
chmod +x ~/project/array-comparison.sh

La commande chmod modifie les permissions d'un fichier. L'option +x ajoute le droit d'exécution, vous permettant ainsi de lancer le script comme un programme.

  1. Exécutez le script :
~/project/array-comparison.sh

Cette commande lance l'exécution de votre script. La partie ~/project/ précise le chemin d'accès au fichier.

Vous devriez obtenir un résultat semblable à celui-ci :

Common elements between a and b: 5 6
Common elements among a, b, and c: 5

Ce résultat confirme que :

  • Les éléments communs aux tableaux a et b sont 5 et 6.
  • L'unique élément commun aux trois tableaux (a, b et c) est 5.

Si vous n'obtenez pas ce résultat ou si une erreur survient, vérifiez attentivement votre code pour corriger d'éventuelles fautes de frappe ou des segments manquants.

Résumé

Dans cet atelier, vous avez appris à comparer des tableaux en script Shell. Vous avez conçu un script capable d'identifier les éléments communs entre trois tableaux en utilisant des boucles imbriquées et des structures conditionnelles. Cet exercice a mis en lumière des concepts fondamentaux du Shell, notamment :

  1. La création et l'initialisation de tableaux.
  2. L'utilisation de boucles imbriquées pour comparer des données.
  3. L'usage de conditions pour vérifier l'égalité.
  4. L'ajout dynamique d'éléments dans un tableau.
  5. La gestion des permissions et l'exécution d'un script.

Ces compétences sont essentielles en programmation Shell et pourront être appliquées à des tâches de traitement de données plus complexes à l'avenir. En continuant à pratiquer, vous découvrirez que la manipulation de tableaux est un outil puissant pour gérer efficacement des ensembles de données.

N'oubliez pas que la pratique est la clé de la maîtrise. Essayez de modifier le script pour tester d'autres tableaux ou pour chercher les éléments uniques plutôt que les éléments communs. Bon scriptage !