Bash jusqu'à des boucles

Bash jusqu'à des boucles
Il existe plusieurs types de boucles qui peuvent être utilisées dans les scripts bash. Pour les boucles, tandis que les boucles et les boucles.

Conceptuellement, la boucle FOR doit être utilisée pour traverser une série d'éléments tels que Loop via chaque élément dans un tableau ou chaque fichier dans un répertoire, etc. La boucle while doit être utilisée aussi longtemps qu'une certaine condition est vraie, comme le compteur A est inférieur à une valeur maximale ou que le temps de ping à un serveur est inférieur à un seuil ou pour toujours si vous boucle pendant que vous.

La boucle de fer est similaire à la boucle While mais avec une logique inverse. Au lieu de boucler pendant qu'une condition est vraie, vous supposez que la condition est fausse et en boucle jusqu'à ce qu'elle devienne vraie. Ils sont inversés les uns des autres dans une expression logique. Choisir la bonne boucle entre une boucle de temps et jusqu'à ce que la boucle permet à votre programme d'être plus lisible et compréhensible par les autres ou vous-même lorsque vous revenez au code un peu plus tard.

Quelques exemples ou raisons typiques d'utiliser une boucle jusqu'à ce que la boucle puisse être, jusqu'à ce que l'utilisateur entre la «sortie»; Boucle jusqu'à ce que les données générées soient supérieures au volume de données demandé, ou jusqu'à ce qu'un certain nombre de fichiers correspondent à votre recherche.

La syntaxe de base de jusqu'à la boucle ressemble à ceci:

Jusqu'à [condition]; faire
Lignes de code
Plus de lignes de code
fait

Permet maintenant de prendre quelques exemples. Le premier exemple sera multiple de deux jusqu'à atteindre un seuil de taille de 1000:

#!/ bac / bash
Num = 1
jusqu'à ["$ num" -gt 1000]; faire
echo $ num
Soit num = num * 2
fait

Le deuxième exemple continuera de cingler une URL jusqu'à ce que le temps de réponse soit supérieur à 100 millisecondes:

#!/ bac / bash
Millisecondes = 0
# Nous allons cingler jusqu'à ce qu'il devienne plus lent que 1000 millisecondes
Jusqu'à [$ millisecondes -gt 1000]
faire
# Exécutez le ping et extraire la ligne qui a le temps de ping, qui se termine dans le temps = xxxx ms
Sortie = 'ping -c 1 google.com | Temps grep | awk -f = 'print $ nf' '
Echo "Temps de ping: $ Output"
# Extrait le nombre de milliseocnds de la chaîne comme entier
Millisecondes = 'echo $ output | awk 'print $ 1' | awk -f. 'imprimer 1 $' '
Echo "Nombre de ms = $ millisecondes"
sommeil 1
fait
Écho "Temps de ping dépassé 1000 millisecondes"

Le troisième exemple prendra un fichier et combinera le fichier avec lui-même jusqu'à ce qu'il atteigne la taille de 1 kilobyte:

#!/ bac / bash
FileName = 'Basename "0 $"'
Echo $ nom de fichier
Tmp_file = "./ tmp1 "
Target_file = "./cible"
Cat $ nom de fichier> $ cible_file
FileSize = 0
# augmenter la taille du fichier jusqu'à 1kb
Jusqu'à [$ file size -gt 1024]
faire
# Ajouter ce fichier au contenu du fichier cible
cp $ cible_file $ tmp_file
cat $ tmp_file >> $ cible_file
FileSize = 'du $ cible_file | awk 'print $ 1' '
ECHO "Fichiers: $ Fichiers"
sommeil 1
fait
ECHO "La taille de la nouvelle fichier a atteint la cible de 1KB"

Le quatrième exemple demandera à l'utilisateur la contribution de son nom jusqu'à ce qu'il tape de quitter pour quitter le programme:

#!/ bac / bash
Réponse = "foo"
# augmenter la taille du fichier jusqu'à 1kb
Jusqu'à ["$ réponse" = "sortie"]
faire
echo -n "Entrez votre nom ou« sortie »pour quitter ce programme:»
lire la réponse
Si ["$ réponse" != "exit"]; alors
Echo "Hello $ réponse"
Fi
fait
Echo "Merci d'avoir joué à ce jeu"

CONCLUSION

Le point clé est d'utiliser JUSQU'À Boucle pour rendre votre code plus clair lorsque la condition devrait être toujours fausse et ensuite vous voulez arrêter votre action en boucle lorsque la condition devient vraie. En d'autres termes, continuer à faire boucle JUSQU'À un moment donné dans le temps. Avec cette perspective, j'espère que vos scripts bash pourront être plus clairs et vous avez appris quelque chose avec cet article. Merci.