Émuler une boucle à faire dans Bash

Quelle est la meilleure façon d’émuler une boucle à faire dans Bash?

Je pourrais vérifier l’état avant d’entrer dans la boucle while, puis continuer à vérifier la condition dans la boucle, mais c’est du code dupliqué. Y a-t-il un moyen plus propre?

Pseudo code de mon script:

 while [ current_time <= $cutoff ]; do check_if_file_present #do other stuff done 

Cela n’effectue pas check_if_file_present si check_if_file_present est lancée après l’heure de check_if_file_present $cutoff et qu’un faire-tout le ferait.

Deux solutions simples:

  1. Exécutez votre code une fois avant la boucle while

     actions() { check_if_file_present # Do other stuff } actions #1st execution while [ current_time < = $cutoff ]; do actions # Loop execution done 
  2. Ou:

     while : ; do actions [[ current_time < = $cutoff ]] || break done 

Placez le corps de votre boucle après le while et avant le test. Le corps réel de la boucle while doit être un no-op.

 while check_if_file_present #do other stuff (( current_time < = cutoff )) do : done 

Au lieu du côlon, vous pouvez utiliser continue si vous trouvez cela plus lisible

J'ai changé le test pour utiliser des doubles parenthèses, car vous semblez comparer des nombres entiers. À l'intérieur des doubles crochets, les opérateurs de comparaison tels que < = sont lexicaux et donneront le mauvais résultat en comparant 2 et 10, par exemple. Ces opérateurs ne fonctionnent pas entre crochets simples.

Au lieu du côlon, vous pouvez utiliser continuer si vous trouvez cela plus lisible

Ma réputation est trop basse pour laisser un commentaire sur le post de Dennis Williamson. Cette méthode imite la façon de faire les boucles Do-While que je cherchais – pour avoir le test de condition après les actions. J’ai également constaté que je peux placer un incrément d’index (si nécessaire) après l’instruction do, au lieu d’une instruction continue.

 while check_if_file_present #do other stuff (( current_time < = cutoff )) do (( index++ )); done