A maioria das linguagens de programação oferece suporte a várias alternativas para linhas de código de loop. O Bash suporta nativamente loops 'while', loops 'para cima’ e o 'for loops’ mais conhecido. Esta postagem apresenta e analisa os três.
Quais são Bash Loops?
Para definir isso um pouco melhor, devemos começar com a questão o que são loops. Os loops são uma construção da linguagem de programação, que permite a um desenvolvedor repetir (Em outras palavras, repetir) certas partes, o todo, do código dentro dessa definição de loop. Agora é fácil de configurar Bash Loops como qualquer construção de linguagem de programação em loop usada no bash!
O Bash suporta nativamente loops baseados em 'for', 'até’ y ‘enquanto’. Cada um deles tem suas próprias vantagens, mas você já pode ter uma ideia de seus significados apenas olhando para o idioma da palavra principal. Como um exemplo, 'até’ leva alguém a pensar naturalmente em 'fazer algo até’ e isso é o que o bash loops 'up para' fazer; repita uma certa quantidade de código (o todo) até que uma certa condição seja atendida.
Equivalentemente, los bucles ‘enquanto’ eles continuam a funcionar até que uma condição não seja mais verdadeira. Para terminar, o 'for loops’ são repetidos, como um exemplo, um número definido de vezes, equivalente a como escreveríamos 'para 70 vezes, faço…'. Isso nos ajuda a entender logicamente os recursos exclusivos que cada loop fornece e a implementar um código mais legível..
por Loops bash baseados
Para os fins desta postagem, veremos a maneira mais nova de definir Bash for loops. Uma definição um pouco mais antiga e menos moderna de por loops no bash podem, como um exemplo, parece com isso: for i in $(seq 1 5); do echo $i; done
. Vamos comparar isso com uma aparência mais limpa, melhor estruturado e moderno. por círculo:
para ((i = 1;eu<= 5;i ++)); faça eco $ i; feito
Que simples por Bash de uma linha baseada em (uma definição frequentemente usada nos círculos Linux / Bash para conceituar um mini-script escrito em uma única linha) irá imprimir os números do 1 al 5 em ordem sequencial. Definimos um valor inicial para o i
variável ($i
) atribuindo o valor 1
ao mesmo, como a primeira parte do nosso por definição de loop, terminado por um ;
delimitador.
A seguir, especificamos que temos apenas um para fazer o upload ‘Menor ou igual a cinco’ através do uso i<=5
. Posteriormente indicamos o que deve acontecer no final de cada rodada, e isso está aumentando a variável i
por um, o, em uma abreviatura de codificação comumente usada (incluído na linguagem C ++, como um exemplo), isso se traduz como i++
.
Para terminar, especificamos o início do nosso código de loop usando do
, Em outras palavras, depois de terminar nosso for
definição de loop, assim como qualquer outra instrução final, com ;
antes de do
. Além disso, especificamos o final do nosso código de loop usando done
e nós echo
(imprimir) o valor da nossa variável eu entre ele do
e done
.
Observe também especificamente que o do
a cláusula em si não termina com ;
, e fazer isso causaria um erro. Considere o do
um prefixo para o que fazer, e faz mais sentido. Esta talvez seja uma das razões pelas quais às vezes é mais limpo colocar coisas em um script de várias linhas, dado que do
pode ser apenas a última palavra em uma linha.
Mesmo ao definir outros tipos de loops, vamos continuar a manter o do
e done
cláusulas, e sempre teremos certeza de terminar nossa definição de loop (Em outras palavras, antes do
) com ;
, así como finalizar el final de cada declaración individual dentro de nuestra do...done
definición de bucle con ;
.
Pongamos esto en un pequeño script para ver más claramente cómo pueden funcionar las cosas de esa manera:
#!/bin/bash for ((i = 1;eu<=10;i+=2)); do echo $i done
Después de hacer que el script sea ejecutable con chmod +x test.sh
, ejecutamos lo mismo. Se introdujeron algunos pequeños cambios en el guión. Observe cómo esta vez, estamos aumentando la variable i
por dos cada vez. Isso é feito usando outra abreviatura de codificação, a saber i+=2
que pode ser lido como aumentar e em dois. Você também pode escrever i=i+2
no mesmo lugar, e funciona exatamente da mesma maneira.
Vemos que começamos em 1e aumentar em 2 cada vez que passamos pelo loop, acabando 9. A razão pela qual termina em 9 é que o valor máximo é 10. Por isso, depois de 9 o próximo valor seria 11, que é maior que 10 e é por isso que não mostra / links.
Considere também como ;
foi removido após a linha de eco. Isso ocorre porque não é necessário encerrar o final de uma declaração se houver uma situação / caractere de fim de linha. Este é o caso; não temos nenhum outro comando após o echo $i
e a linha termina imediatamente (espaços no final da linha também seriam adequados, o princípio é não ter outro comando a menos que esse novo comando tenha o prefixo (e o anterior terminou) por ;
).
clima Loops bash baseados
A seguir, vamos dar uma olhada em um loop bash, usando o mesmo do...done
definição de loop, podemos estabelecer um enquanto o loop baseado em bash a ser executado, desde que uma determinada condição seja verdadeira.
i = 1; enquanto [ $ao 5 ]; faça eco $ i; i = $[ eu + 1 ]; feito
Neste exemplo, nós fazemos o mesmo que nosso primeiro por exemplo de loop baseado. Embora a definição pareça mais complexa (e é por isso que um por loop pode ser mais adequado para este caso de uso específico), é interessante ver como podemos estabelecer um clima fazer um loop da mesma maneira.
Aqui, primeiro definimos nosso i
variável, manualmente, em um comando separado terminado por ;
, para 1. A seguir, nós começamos um clima loop onde definimos uma condição, de uma forma muito equivalente à definição de um if
demonstração (há um link no final desta postagem para uma postagem sobre if
declarações para mais informações), onde estamos verificando se o i
a variável é menor ou igual (-le
) depois de 5.
Depois disso, temos nosso frequente do...done
bloco no qual echo
nossa variável, e posteriormente, em uma nova declaração, manualmente, aumentar o valor do nosso i
variável por um em um cálculo matemático, conforme definido pelo $[...]
Expressões idiomáticas de cálculo Bash. A seguir, vamos revisar um até bash loop baseado
Até que Loops bash baseados
Armado com o que aprendemos até agora, agora podemos examinar mais facilmente o seguinte Até que bash loop baseado:
i = 1; até [ $i-gt 5 ]; faça eco $ i; i = $[ eu + 1 ]; feito
Aqui nós procuramos a condição eu maior do que 5 virar realidade. Até agora (Em outras palavras, uma Até que loop baseado em), vamos imprimir (usando echo
) nossa variável eu e aumentar o mesmo com um, o mesmo que nosso anterior clima baseado em exemplo.
Podemos ver como a sintaxe do Até que comando é muito equivalente a clima comando. Observe também que, diferente for
baseado em comando, esses comandos procuram por um certo condição para persistir (com clima), ou para um certo condição para começar (com Até que). Esto además posibilita utilizar otros comandos que pueden devolver una salida equivalente a verdadero / falso, como um exemplo grep -q
:
eco 1 > a while grep -q '1' ./a; do echo 'yes'; dormir 5; feito
Aquí sumamos el número 1 a un archivo llamado umay compruebe la existencia del número 1 dentro de ese archivo usando un grep -q
(un grep silencioso). Seguimos haciéndolo (Em outras palavras clima) hasta que ya no sea cierto. Aunque es cierto, imprimimos el texto sim y pausa el bucle durante cinco segundos con sleep 5
. Observe cómo cada comando termina con ;
de novo.
Depois de cerca de 17 segundos, interrompemos nosso script usando CTRL + c, que é o método universal para interromper um procedimento em execução no bash (ao mesmo tempo do CTRL + z Mais forte e mais eficaz do que pausar um procedimento imediatamente, Mas isso é para outro post!)
Final
Neste post, verificamos os loops 'for', 'enquanto’ y ‘até’ que estão nativamente disponíveis no Bash. Se você está interessado em mais bash, dê uma olhada nos testes condicionais em bash: E se, então, outro, funções elif e bash e variáveis locais.
Desfrutar!