Nouvelles Du Monde

Astuces Linux bash : plusieurs façons de boucler avec bash

Astuces Linux bash : plusieurs façons de boucler avec bash

La frapper shell fournit une superbe fonctionnalité lorsqu’il s’agit d’écrire des scripts. Cela inclut de nombreuses façons de parcourir une pile de données afin que vous puissiez en faire beaucoup avec une seule exécution d’un script. Que vous parcouriez un grand groupe de valeurs numériques, de jours de la semaine, de noms d’utilisateur, de mots, de fichiers ou de tout autre chose, frapper a une option qui peut vous faciliter la tâche.

boucles for, while et until

La première chose que vous devez savoir sur la mise en boucle frapper est qu’il existe plusieurs commandes de base à utiliser. La tandis que loop bouclera tant qu’une condition particulière est vraie. La jusqu’à boucle bouclera jusqu’à ce qu’une condition devienne vraie, et le pour boucle parcourra une série de valeurs quelle que soit leur origine.

Par exemple, en utilisant tandis quevous pouvez boucler pendant qu’un nombre est inférieur à 100, parcourir les jours restants du mois comme indiqué dans le script ci-dessous (dans lequel nous saisissons le jour actuel à l’aide de la Date commande et le dernier jour de la dernière chaîne dans la sortie de la cal commande) ou bouclez quelque chose de complètement différent.

#/bin/bash

# day of month
day=`date | awk '{print $3'}`
# number of days in month
numdays=`cal | tail -2 | head -1 | awk '{print $NF}'`

while [ $day -le $numdays ]
do
    echo $day
    ((day++))
done

Lorsque nous exécutons ce script, nous devrions voir quelque chose comme ceci :

$ remaining_days
27
28
29
30

Ce script suivant boucle jusqu’à ce qu’un collègue se connecte. Tant que le nombre de connexions de l’utilisateur est égal à zéro (c’est-à-dire qu’il n’est pas connecté), nous affichons « en attente », puis attendons encore 60 secondes. Une fois l’utilisateur connecté, le tandis que boucle est quittée et, dans les 60 secondes suivantes, un message s’affiche confirmant la présence de l’utilisateur connecté.

#!/bin/bash

echo -n "user to wait for> "
read user

while [ `who | grep $user | wc -l` == 0 ]
do
    echo waiting
    sleep 60
done

echo $user is online

La jusqu’à version en boucle du script est très similaire.

Lire aussi  Le nouveau Samsung Galaxy M34 5G est en vente maintenant !
#!/bin/bash

echo -n "user to wait for> "
read user

until [ `who | grep $user | wc -l` -gt 0 ]
do
    echo waiting
    sleep 60
done

Dans pour boucles, nous parcourons une série de valeurs, mais il existe de nombreuses commandes que vous pouvez utiliser pour générer ces valeurs.

La tandis que et jusqu’à les commandes sont expliquées plus en détail dans Comment répéter une commande Linux jusqu’à ce qu’elle réussisse

Boucler les lettres et les chiffres

Vous pouvez parcourir une chaîne de chiffres ou de lettres en spécifiant une plage de valeurs dans la {commencer arrêter} format comme dans les exemples ci-dessous. Notez que vous pouvez commencer avec n’importe quelle valeur. Vous n’êtes pas obligé de commencer par un « a » ou un « 0 ».

$ for letter in {a..f}; do   echo $letter; done
a
b
c
d
e
f

Dans cet exemple suivant, nous commençons par 5, pas 1, et évitons les retours chariot avec un écho -n commande.

$ for number in {5..11}; do   echo -n "$number "; done
5 6 7 8 9 10 11 $

Vous pouvez même inverser l’ordre des chiffres ou des lettres si vous le souhaitez. Voici quelques exemples :

$ for letter in {z..x}; do   echo $letter; done
z
y
x
$ for number in {11..7} > do > echo $number > done 11 10 9 8 7

En boucle pour toujours

Le moyen le plus simple de boucler pour toujours est d’utiliser un “alors que c’est vrai” boucle. La boucle ne s’arrêtera que si vous la tuez – par exemple, avec un ^ C. S’il est inclus dans un script qui s’exécute en arrière-plan, vous pouvez utiliser un tuer commande (par exemple, kill 654321) pour terminer le script.

Lire aussi  Un homme d'Hazelwood accusé d'avoir harcelé un vendeur de Facebook Marketplace
$ while true
> do
>     echo Hello
>     sleep 60
> done
Hello
Hello
^C

Plus d’informations sur la boucle permanente sont disponibles sur Comment boucler pour toujours dans bash sous Linux.

Échapper aux boucles avec pause et continuer

La Pause et Continuez Les commandes vous permettent de sortir entièrement d’une boucle (Pause) ou recommencer en haut de la boucle (Continuez), en sautant toutes les commandes entre le Continuez commande et la fin de la boucle.

La Pause et Continuez les commandes sont expliquées plus en détail sur Utilisation de break et continue pour quitter les boucles.

La plier La commande peut être utilisée pour diviser un fichier ou une chaîne en morceaux de même taille. La longueur par défaut est de 80 caractères. Dans cet exemple, nous divisons la chaîne en blocs de 11 caractères avec -c11 (11 caractères).

$ fold -c11 trythis
This file h
as a few ri
diculously
long charac
ter strings
. Oh, well.

Lorsque vous utilisez le plier commande dans un pour boucle, cependant, vous devez vous rappeler que toute chaîne de caractères résultante contenant un blanc entraînera une ou plusieurs boucles supplémentaires car pour pauses sur chaque chaîne séparée par des blancs.

$ for line in `fold -c10 trythis`
> do
>   echo -n "$line"
>   echo -n ":"
>   echo $line | wc -c
> done
This:5
file:5
has:4
a:2
few:4
ridiculous:11
ly:3
long:5
ch:3
aracter:8
st:3
rings.:7
Oh,:4
well.:6

Plus sur le plier la commande se trouve sur Utiliser le pli pour rendre le texte plus lisible et Utilisation de la commande fold pour piloter des boucles.

Lire aussi  Apple envisage de faire une offre pour les droits de streaming du football anglais - News 24

Boucler mot à mot

Pour parcourir une liste de mots à l’aide d’un pour boucle, vous pouvez exécuter une commande comme celle ci-dessous. Notez que l’apostrophe doit être échappée pour ne pas être interprétée comme le début d’une chaîne.

$ for word in all's well that ends well; do   echo $word; done
all's
well
that
ends
well

Si vous souhaitez parcourir les mois de l’année, vous pouvez utiliser une commande comme celle-ci :

$ for month in `locale mon | sed 's/;/ /g'`; do   echo $month; done
January
February
March
April
May
June
July
August
September
October
November
December

La commande ci-dessus utilise le lieu commande pour obtenir une liste de mois et sed pour diviser la ligne séparée par des points-virgules en mois individuels.

Emballer

Boucler dans des scripts et sur la ligne de commande sous Linux est clairement l’une des meilleures techniques pour faire beaucoup de choses en peu de temps et avec le moins d’effort, surtout si vous transformez vos boucles en scripts que vous pouvez exécuter aussi souvent au besoin sans avoir à réfléchir à tous les détails à chaque fois.

Copyright © 2022 IDG Communications, Inc.

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ADVERTISEMENT