Comment créer une boucle for avec un nombre variable d'itérations?

Comment itérer à travers une boucle n fois où n est spécifié par l'user au début?

J'ai écrit un script shell et j'ai besoin de répéter une certaine partie n nombres de fois (en fonction du nombre de fois que l'user souhaite).

Mon script pour l'instant ressemble à ceci:

echo "how many times would you like to print Hello World?" read num for i in {1.."$num"} do echo "Hello World" done 

Si je change "num" sur un nombre tel que "5", la boucle fonctionne mais je dois pouvoir laisser l'user spécifier le nombre de fois qu'il faut parcourir la boucle.

Vous pouvez utiliser seq

 for i in $(seq 1 "$num") 

ou votre shell peut supporter des loops de style C, par exemple en bash

 for ((i=0; i<$num; i++)) 
 echo "how many times would you like to run your loop ?" read max i=0 while [ "$((i+=1))" -le "$max" ] do # whatever you want to do here done 

Utilisation de "l'évaluation arithmétique" (bash seulement):

 read -p "how many times would you like to print Hello World? " max i=0 while (( i++ < max )) do echo "$i, Hello World." done 

Ou utilisez ceci si vous voulez rendre le programme plus robuste.
Cela permettra d'extraire uniquement les numéros de l'input. Sauf pour un très grand nombre qui pourrait prendre beaucoup de time à être traité, toute autre input sera nettoyée avant d'être utilisée.

 while (( i++ < ${max//[^0-9]} )) 

Encore une autre façon avec {1.."$num"} . L'exapansion de Bash doit être évaluée avant de pouvoir être transférée dans la boucle for. Vous pouvez utiliser la syntaxe d'expansion de cette façon pour le faire fonctionner:

 for i in $(eval echo {1.."$num"}); do echo $i; done