Loop Bash 'While': tutorial e exemplos

Usando o loop ‘while’ no script Bash para iterar o (s) comando (s).

Bash (Bourne Again Shell) é um prompt de comando shell e linguagem de script em sistemas operacionais GNU / Linux. É o shell padrão para a maioria das distribuições Linux.

Como a maioria das linguagens de script, o Bash fornece sintaxes de loop para repetir tarefas semelhantes várias vezes. Neste artigo, aprenderemos como usar o enquanto loop no Bash.

Introdução

O enquanto O loop no Bash é usado para executar comando (s) (comandos executados) várias vezes com base na saída de outro (s) comando (s) (comandos de condição). Os comandos executados continuarão em execução até que o comando de condição seja executado com sucesso (ou seja, retorna um status 0. Qualquer comando no Linux retorna 0 para sucesso e um número inteiro diferente de zero para falha).

Se houver vários comandos de condição, a instrução considera apenas o status do último comando da lista, ou seja, o loop é executado até que o último comando da lista seja executado com sucesso.

Sintaxe Geral

A sintaxe geral para enquanto loop no Bash é:

enquanto faz

A lista de comandos de execução continuará em execução até que o último comando na lista de comandos de condição seja executado com sucesso e saia com o status 0. Na iteração, quando o último comando de condição falha, o loop sai.

O usuário pode especificar qualquer arquivo executável nas listas de comando. Podem ser programas Linux padrão ou programas de usuário ou scripts personalizados. Cada comando deve estar em uma nova linha ou separado por um ponto e vírgula na mesma linha.

Vejamos alguns exemplos.

Loop até que uma variável tenha um valor particular: O seguinte loop é executado até o valor da variável x não é igual a 10.

x = 0 enquanto [[$ x -ne 10]] echo $ x ((x ++)) feito

Em cada iteração, estamos verificando se o valor de x é 10. O valor está sendo verificado usando o teste comando. [[Expressão]] é a sintaxe para o comando de teste (Veja teste de homem) Aqui, uma vez que estamos usando o -um operador (que significa 'diferente de'), o comando de teste retorna 0, ou seja, sucesso, se o valor de x não for 10, e retorna um valor diferente de zero, ou seja, falha se o valor de x for 10.

Então dentro do fazer ... pronto bloco, imprimimos o valor de x e o incrementamos. Quando o valor de x é 10, o comando de teste retorna um status diferente de zero e o loop termina.

Observação: A variável de índice a ser usada no loop while deve ser inicializada antes do loop while ou nos comandos de condição, ao contrário do loop for, que permite inicializar uma variável implicitamente.

Com vários comandos de condição: O seguinte loop cria 5 diretórios chamados dir0, dir1, ... dir4.

z = 0 while echo "Lista de arquivos:" ls -l [[$ z -ne 5]] do echo "Criando dir $ z ..." mkdir dir $ z ((z ++)) concluído

Primeiros comandos echo "Lista de arquivos:" e ls -l será executado uma vez completamente; seu sucesso ou fracasso não tem impacto algum sobre a duração do loop.

Em seguida, o comando de teste para verificar o valor da variável z será executado. Até que o valor de z não seja 5, o comando de teste retorna o status de sucesso e, portanto, o loop continua em execução. Os comandos de condição e comandos executados continuam em execução em ordem. Aqui, para cada iteração, ele executará primeiro o comando echo e o comando ls na condição e, em seguida, o comando da terceira condição verifica o valor de z. Se não for 5, ele entra no loop e executa os comandos dados.

Quebrar e continuar

Declaração de quebra para saída condicional

Também podemos usar a declaração condicional E se dentro do loop. O E se declaração pode ser usada com um pausa declaração, para uma saída condicional do loop.

x = 0 enquanto [[$ x -ne 10]] faz se [[$ x -eq 5]] quebrar fi echo $ x ((x ++)) feito

O loop while acima imprimirá números de 0 a 4. Então, quando o valor de i for 5, ele sairá do loop. Isso é particularmente útil quando um loop deve ser encerrado quando um comando fornece uma saída específica.

Continue a declaração para ignorar uma iteração condicionalmente

Bash também tem um Prosseguir , para pular a parte restante de uma iteração em um loop se uma condição específica for satisfeita.

x = 0 enquanto [[$ x -ne 10]] faz se [[$ x -eq 5]] continua fi echo $ x ((x ++)) feito

O loop acima imprimirá números de 0 a 10, exceto 5, porque durante a iteração de x = 5 há uma instrução continue, que irá pular o resto do código no loop no início com a iteração de x = 6.

Usando Loops: Scripts e Linha de Comando

As sintaxes de loop podem ser usadas no shell Bash diretamente ou a partir de um arquivo de script de shell executável. Igual a por e enquanto loops, uma vez que enquanto a sintaxe do loop é inserida no shell, o shell continua o prompt para permitir que o usuário continue os comandos a serem repetidos.

Ou então o usuário pode salvar isso em um arquivo de script e executar o arquivo de script.

O #! / bin / bash no início especifica o interpretador a ser usado quando o arquivo é executado. Embora o Bash seja o shell mais comumente usado hoje em dia, alguns usuários preferem shells como zsh, que deve ser especificado no lugar de bash no início deste arquivo.

Para dar permissões de execução para este arquivo, execute:

chmod + x test.sh

Finalmente, para executar o arquivo, corre:

./test.sh

Conclusão

O enquanto loop, semelhante a por e até os loops são um recurso importante no script Bash. O loop while tem um uso semelhante ao loop until, exceto que é usado para executar comandos / programas alternativos quando um programa específico é bem-sucedido. Isso costuma ser útil em scripts de rede avançados, scripts de manutenção de sistema, etc.