Loop Bash 'Até': tutorial e exemplos

Usando o loop ‘until’ em um script Bash para repetir 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 até loop no Bash.

Introdução

O até 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 continue falhando (ou seja, retorna um status diferente de zero. Qualquer comando no Linux retorna 0 para sucesso e um número inteiro diferente de zero para falha). Isso é exatamente o oposto de enquanto loop, no qual os comandos executados continuam em execução até que o comando de condição seja bem-sucedido.

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

Sintaxe Geral

A sintaxe geral para até loop no Bash é:

até fazer

A lista de comandos de execução será executada até que o último comando na lista de comandos de condição falhe. Assim que o último comando for bem-sucedido, o loop termina.

Os usuários podem especificar qualquer arquivo executável nas listas de comandos. 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 é 10.

x = 0 até [[$ x -eq 10]] fazer o eco $ 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).

Então dentro do fazer ... pronto bloco, simplesmente imprimimos o valor de x e o incrementamos. O loop termina assim que o comando de condição for bem-sucedido, ou seja, quando $ x é igual a 10.

Observação: A variável de índice a ser usada no loop 'até' deve ser inicializada antes do loop 'até' ou nos comandos de condição, em oposição ao 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 até echo "Hi" echo "Bye" [[$ z -eq 5]] do echo "Criando dir $ z ..." mkdir dir $ z ((z ++)) concluído

Os primeiros comandos echo “Hi” e echo “Bye” serão executados completamente uma vez; 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 esse comando continue falhando, ou seja, até que o valor de z seja 5, os comandos de condição e os comandos executados continuam executando em ordem. Aqui, para cada iteração, ele executará primeiro os 2 comandos de eco na condição e, em seguida, o comando da 3ª 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 uma declaração, para uma saída condicional do loop.

x = 0 até [[$ x -eq 10]] fazer se [[$ x -eq 5]] quebrar fi echo $ x ((x ++)) feito

O loop until 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 declaração para pular parte restante de uma iteração em um loop se uma condição particular for satisfeita.

x = 0 até [[$ x -eq 10]] fazer se [[$ x -eq 5]] continuar 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 até 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 até loop é outro recurso importante no script Bash. Ele tem uma importância particular em scripts complexos quando um determinado conjunto de programas deve retornar o status de falha e alguns outros comandos devem ser executados para registrar a falha, exibir o erro em detalhes ou simplesmente executar alguns programas alternativos.