Bash Loops em profundidade

Bash Loops em profundidade
Um loop consiste em um ou mais comandos que são executados repetidamente até que uma condição seja atendida. Para que isso aconteça, os comandos devem estar em um construto. O construto e seus comandos formam um comando composto. Um comando Bash sai com zero se não houvesse problema. Por outro lado, ele sai com um número maior que zero se houvesse um problema ou um problema. O status de saída de um comando composto é o de seu último comando.

Para entender este artigo, o leitor já deve conhecer comandos simples de bash. Qualquer comando não simples de bash usado neste artigo é explicado. Não se esqueça de que os comandos bash podem ser gravados em um arquivo de texto, e o arquivo de texto pode ser executado digitando o nome do arquivo (precedido por caminho) no terminal e depois pressionar Enter. Também não se esqueça de se permitir executar o arquivo com algo como:

sudo chmod +x program_name

Conteúdo do artigo

  • Bash Loop Basics
  • Bash Break e Continue Comandos
  • Exemplos de loop útil
  • Conclusão

Bash Loop Basics

BASH até/feito loop
Considere o seguinte código:

Seja n = 0
até ["$ n" -eq 5]; fazer
eco $ n
((++ n))
feito

A saída é:

0
1
2
3
4

Quando o programa começa, a variável n é declarada e zero é atribuído a ele. Os dois comandos antes de "doado" são executados 5 vezes. ((++ n)) incrementos n em 1 para cada iteração. Observe as posições das palavras reservadas, "até", "fazer" e "fazer". Os dois comandos são repetidos até que a condição ["$ n" -eq 5] seja atendida. Na condição, "-eq" significa "igual a". A condição é que o valor de n é igual a 5. Observe que os valores ecoados começam de 0 a 4. Isso ocorre porque, para cada iteração, a condição da construção é verificada, antes que o corpo (dois comandos) do construto seja executado. Se a condição for falsa, o corpo não seria executado. A palavra reservada "feita", sempre deve ser digitada em uma nova linha.

A sintaxe para o loop de até/feito é:

Até o teste de teste; fazer comandos consequentes; feito

O segundo semicolon não é necessário se a palavra reservada, "feita" for digitada em uma nova linha.

Se a condição sair com zero, significando verdadeiro, o corpo do loop é executado. Se a condição sair com um número maior que zero, o que significa falso, o corpo do loop não será executado.

Bata enquanto/feito loop
Este loop é semelhante ao loop de até/feito, exceto que a condição deve ser reformulada. Ambas as construções usam a palavra "faça". O código a seguir produz a mesma saída de antes:

Seja n = 0
enquanto ["$ n" -LT 5]; fazer
eco $ n
((++ n));
feito

Na condição do código, "-LT" significa "menos de". A sintaxe para o whle whleg/feita loop é:

enquanto testam comandos; fazer comandos consequentes; feito

Bash for/feito loop
Existem duas sintaxe para o loop "for", que são:

para ((expr1; expr2; expr3)); dos comandos; feito

e

para nome [[em [palavras…]]; ] dos comandos; feito

O código a seguir usa a primeira sintaxe para produzir o mesmo resultado, como acima:

para ((n = 0; n < 5; ++n)); do
eco $ n
feito

No (comando composto, a primeira expressão inicializa a variável n a zero. A próxima expressão é a condição enquanto. A última expressão nos parênteses duplos comando composto é a expressão de incremento. Depois, há o corpo, que pode consistir em mais de um comando e depois "feito".

A segunda sintaxe é melhor usada com uma matriz - veja abaixo.

Bash Break e Continue Comandos

quebrar
Todas as iterações (execução repetida do corpo) destinadas a um loop não devem necessariamente ser executadas. O comando Break pode ser usado para interromper as iterações restantes. No código a seguir, as iterações param logo após N é igual a 2.

para ((n = 0; n < 5; ++n)); do
eco $ n
if ((n == 2)); então
quebrar
fi
feito

A saída é:

0
1
2

Nesse loop, três iterações ocorreram.

continuar
Uma iteração pode ser ignorada usando o comando continuar. O código a seguir ilustra o seguinte:

para ((n = 0; n < 5; ++n)); do
if ((n == 2)); então
continuar
fi
eco $ n
feito

A saída é:

0
1
3
4

A iteração para exibir 2 foi ignorada.

Os comandos de interrupção e continuação também podem ser usados ​​nos loops até/feitos e feitos.

Exemplos de loop útil

Até/feito exemplo de loop
O comando para criar um arquivo de texto vazio é tocado. O script a seguir criará arquivos de texto vazios no diretório de trabalho atual, até que o número de arquivos criados seja 4:

deixe i = 1
File = "MyFile"
até [$ i -eq 5]; fazer
FileName = "$ arquivo $ i.TXT"
Toque em $ FILENAME
((++ i))
feito

Os nomes dos arquivos criados devem ser myfile1.txt, myfile2.txt, myfile3.txt e myfile4.TXT.

O único ponto e vírgula no código pode ser omitido se "fazer" for digitado na próxima linha.

Exemplo de loop while/feito
O comando para criar um diretório vazio é mkdir. O script a seguir criará diretórios vazios no diretório de trabalho atual até que o número de diretórios criados seja 4:

i = 1
dir = "mydir"
enquanto [$ i -LT 5]; fazer
Dirname = "$ dir $ i"
mkdir $ dirname
((++ i))
feito

O nome dos diretórios criados deve ser mydir1, mydir2, mydir3 e mydir4.

O único ponto e vírgula no código pode ser omitido se "fazer" for digitado na próxima linha.

para exemplo de loop
A segunda sintaxe para o loop for mencionada acima é:

para nome [[em [palavras…]]; ] dos comandos; feito

Esta sintaxe é melhor usada com uma lista. Em termos simples, a sintaxe é:

para variável na lista; dos comandos; feito

A lista pode ser uma matriz. O comando a seguir lê uma linha de entrada de texto do terminal para a matriz ARR:

Leia arr

À medida que o script está em execução, quando atingir esse comando, ele fará uma pausa (com um cursor piscante) para o usuário inserir a entrada. Se os tipos de usuário:

um dois três

Em uma linha e prensas, entra, então o primeiro elemento da matriz teria a palavra "um", o segundo teria a palavra "dois", e a terceira teria "três". Observe que os valores de entrada foram separados por espaços.

O código a seguir usa a segunda sintaxe do loop para ler e exibir uma entrada no script:

eco "digite valores e pressione Enter:"
Leia arr
para var em $ arr; fazer
echo $ var
feito

Se a entrada foi:

um dois três

Então a saída seria:

um
dois
três

O único ponto e vírgula no código pode ser omitido se "fazer" for digitado na próxima linha.

Comando de seleção Bash

O comando select não é realmente um loop. No entanto, envolve a iteração, que não é codificada pelo programador. Em termos simples, a sintaxe do comando select é:

Selecione Item na [Lista]
fazer
[Comandos]
feito

Aqui, "Selecione", "In", "Do" e "Done" são palavras reservadas. Um uso do comando select é exibir os itens da lista para o terminal. O script a seguir ilustra o seguinte:

Selecione Item em banana, limão, laranja, pêra, abacaxi
fazer
quebrar
feito

Observe o uso do comando Break. A saída é:

1) Banana,
2) limão,
3) laranja,
4) Pear,
5) Abacaxi
#?

A lista consiste nos valores banana, limão, laranja, pêra e abacaxi. Esses valores foram exibidos e numerados. O símbolo "#?”(E o cursor piscante ao lado) está esperando que o usuário digite algo e pressione a tecla Enter. Digite qualquer coisa, depois pressione a tecla Enter e finalmente termina a execução do script.

Observe que a lista foi exibida como um menu, numerada, para a saída. Com isso, o usuário pode selecionar um item no menu digitando o número correspondente, ao lado de “#?”Em seguida, pressione a tecla Enter. O script a seguir ilustra como a laranja é selecionada digitando o número 3:

Selecione Item em banana, limão, laranja, pêra, abacaxi
fazer
eco $ Responder
quebrar
feito

A tela de saída é:

#? 3
então
3

Conclusão

Um loop em Bash é um construto; Uma construção é um comando composto. O corpo do construto tem pelo menos um comando. A partir de agora, Bash tem apenas três loops, que são até/feitos, enquanto/feito, e para/feito. Cada loop usa a palavra reservada "faça". Depois que a condição foi digitada, "faça" deve ser precedido por ';', ou ser digitado na próxima linha do código. Cada loop toma uma condição. O até/feito e enquanto os loops são semelhantes. A principal diferença ocorre ao codificar a condição.

O comando select é um comando composto, mas não é realmente um loop. Ele permite ao usuário selecionar um item de uma lista de menus quando o script estiver executando interativamente.

Os comandos de quebra e continuação podem ser usados ​​em um loop. O comando Break pode ser usado para parar as iterações. Por outro lado, o comando continuação pode ser usado para pular uma iteração.

Isso é tudo o que há para bater loops. O recurso restante a ser estudado é “Como codificar as condições?”. Isso merece um artigo totalmente diferente e não pode ser incluído neste. Veja o artigo neste site, intitulado “Bash Conditionals Sween Depth”, sobre como codificar as condições.

Chrys