GNU/Linux >> Tutoriels Linux >  >> Linux

Script Linux :3 tutoriels pour les boucles while dans Bash

Les scripts Shell, en particulier les scripts Bash, sont un excellent moyen d'automatiser les tâches répétitives ou fastidieuses sur vos systèmes. Pourquoi taper alors que vous pouvez programmer et exécuter des scripts en mode mains libres ? L'une des nombreuses constructions de script est la boucle. Une boucle est une section de code qui récupère des données ou génère des données, puis effectue une opération sur les données, puis recommence le processus jusqu'à ce qu'une condition soit remplie, que le script soit interrompu ou que les données d'entrée soient épuisées. Lorsque vous utilisez des scripts Bash, il est parfois utile d'effectuer des actions à l'aide d'une certaine forme de boucles.

[ Les lecteurs ont également aimé : Cinq façons d'utiliser les opérateurs de redirection dans bash ]

Les commandes de boucle de base dans les scripts Bash sont for et while .

  • for les boucles sont généralement utilisées lorsque vous disposez d'une liste finie connue, telle qu'une série de nombres, une liste d'éléments ou des compteurs.
  • while les boucles peuvent être utilisées avec des listes mais sont également utiles pour les conditions qui ne le font pas ont une limite connue. Vous pouvez l'utiliser pour exécuter des commandes pendant une condition est vraie (ou inversez la logique et exécutez-la alors que la condition est fausse).

Ainsi, bien que (jeu de mots) il existe différentes façons d'effectuer des boucles, dans cet article, je me concentre sur des exemples utilisant while boucles.

1. Une simple boucle while

Imaginez que vous installez une application volumineuse et que vous craignez qu'elle n'utilise trop d'espace sur le système de fichiers.

Au lieu d'exécuter df dans un terminal séparé, vous pouvez exécuter une simple commande pour surveiller l'utilisation du disque à chaque seconde. Cela vous permet d'interrompre le processus d'installation si vous constatez qu'il atteindra cette limite.

while true
do
  df -k | grep home
  sleep 1
done

Dans ce cas, vous exécutez la boucle avec un true condition, ce qui signifie qu'il s'exécutera indéfiniment ou jusqu'à ce que vous appuyiez sur CTRL-C. Par conséquent, vous devez garder un œil dessus (sinon, il continuera à utiliser les ressources du système).

Remarque  :Si vous utilisez une boucle comme celle-ci, vous devez inclure une commande telle que sleep pour donner au système un peu de temps pour respirer entre les exécutions. Exécuter quoi que ce soit sans arrêt peut devenir un problème de performances, en particulier si les commandes à l'intérieur de la boucle impliquent des opérations d'E/S.

2. Attendre qu'une condition devienne vraie

Il existe des variantes de ce scénario. Par exemple, vous savez qu'à un moment donné, le processus créera un répertoire, et vous attendez juste ce moment pour effectuer d'autres validations.

Vous pouvez avoir un while boucle pour continuer à vérifier l'existence de ce répertoire et n'écrire un message que lorsque le répertoire n'existe pas.

Si vous voulez faire quelque chose de plus élaboré, vous pouvez créer un script et afficher une indication plus claire que la condition de boucle est devenue vraie :

#!/bin/bash

while [ ! -d directory_expected ]
do
   echo "`date` - Still waiting" 
   sleep 1
done

echo "DIRECTORY IS THERE!!!"

3. Utiliser une boucle while pour manipuler un fichier

Une autre application utile d'un while loop est de la combiner avec le read commande pour accéder rapidement aux colonnes (ou champs) d'un fichier texte et effectuer certaines actions dessus.

Dans l'exemple suivant, vous choisissez simplement les colonnes d'un fichier texte avec un format prévisible et imprimez les valeurs que vous souhaitez utiliser pour remplir un /etc/hosts fichier.

Ici, l'hypothèse est que le fichier a des colonnes délimitées par des espaces ou des tabulations et qu'il n'y en a pas espaces dans le contenu des colonnes. Cela pourrait modifier le contenu des champs et ne pas vous donner ce dont vous aviez besoin.

Notez que vous ne faites qu'une opération simple pour extraire et manipuler des informations et que vous ne vous souciez pas de la réutilisabilité de la commande. Je classerais cela comme l'un de ces "tours rapides et sales".

Bien sûr, si c'était quelque chose que vous feriez à plusieurs reprises, vous devriez l'exécuter à partir d'un script, utiliser des noms propres pour les variables et toutes ces bonnes pratiques (y compris transformer le nom de fichier en argument et définir où envoyer la sortie, mais aujourd'hui, le sujet est while boucles).

#!/bin/bash

cat servers.txt | grep -v CPU | while read servername cpu ram ip
do
   echo $ip $servername
done

[ Apprenez les bases de l'utilisation de Kubernetes dans cet aide-mémoire gratuit. ] 

Récapitulez

while les boucles sont utiles dans les scripts qui dépendent d'une certaine condition pour être vraie ou fausse, mais vous pouvez également les utiliser de manière interactive pour surveiller certaines conditions.

Les choses importantes à retenir sont :

Soyez toujours clair sur la condition de fin la boucle. Si c'est quelque chose que vous vous attendez à faire vous-même avec un CTRL-C , puis gardez un œil sur votre commande. Pensez à à quelle vitesse vous voulez que chaque cycle de boucle soit répété. Si vous effectuez une opération qui implique des E/S à l'intérieur de la boucle, cela devient un aspect critique de la planification.

Dans cet esprit, amusez-vous while vous pouvez.


Linux
  1. Bash For Loop Guide et exemples

  2. Vous tenir au courant - Exemples de boucle Bash For, While, Until

  3. Bash for loop Exemples

  4. Utiliser et dans la boucle while de Bash

  5. bash Linux. pour boucle et fonction, pour additionner des nombres

Bash Scripting - Boucle While And Until expliquée avec des exemples

Bash Scripting - Boucle For expliquée avec des exemples

Bash For Loops avec des exemples

Shell Scripting pour les débutants - Comment écrire des scripts Bash sous Linux

Bash Scripting Part2 - Boucles For et While avec exemples

La boucle Bash FOR expliquée et simplifiée