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 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