Como você cria um loop for com um número variável de iterações?

4

Como você faz uma iteração através de um loop n quantidade de vezes em que n é especificado pelo usuário no começo?

Eu escrevi um script de shell e preciso repetir uma parte dele n vezes (dependendo de quantas vezes o usuário deseja).

Meu script até agora é assim:

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

Se eu alterar "num" para um número como "5", o loop funciona, mas preciso permitir que o usuário especifique o número de vezes para percorrer o loop.

    
por Sofia 30.12.2015 / 16:32

4 respostas

4

Você pode usar seq

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

ou o seu shell pode suportar loops estilo C, por exemplo em bash

for ((i=0; i<$num; i++))
    
por 30.12.2015 / 16:39
5
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
    
por 30.12.2015 / 16:41
1

Usando "Avaliação Aritmética" (bash apenas):

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 use isso se quiser tornar o programa mais robusto.
Isso extrairá apenas números da entrada. Exceto por um número muito grande que pode levar muito tempo para ser processado, qualquer outra entrada será limpa antes de ser usada.

while (( i++ < ${max//[^0-9]} ))
    
por 31.12.2015 / 01:17
0

Ainda outra maneira com {1.."$num"} . O exapansion do Bash precisa ser avaliado antes que isso possa ser transferido para o loop for. Você pode usar a sintaxe de expansão dessa maneira para que funcione:

for i in $(eval echo {1.."$num"}); 
do 
 echo $i; 
done
    
por 30.12.2015 / 17:21