Loop 'For' do Bash: tutorial e exemplos

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 por loop no Bash.

Introdução

Um script Bash típico contém uma série de comandos a serem executados um após o outro. As variáveis ​​podem ser usadas para armazenar strings, valores de índice inteiro, resultados de um comando, etc. Loops são necessários quando o usuário deseja executar um determinado comando várias vezes. É especialmente útil quando a saída de um comando está na forma de uma lista e, em cada resultado, na lista, um segundo comando deve ser executado.

Sintaxe Geral

A sintaxe geral para por loop no Bash é:

para fazer ... ... pronto

Aqui o é uma variável Bash, que deve ser um nome de variável de shell válido do Linux, ou seja, o nome contém uma combinação de letras (az, AZ), números (0-9) e sublinhado (_) e deve começar com uma letra ou um sublinhado.

O é um intervalo personalizado de índices inteiros que serão repetidos ou uma lista personalizada de inteiros ou strings. Ele também pode conter outro comando do Linux, no entanto, a saída desse comando deve ser separada por espaços ou caracteres de nova linha, ou seja, analisável pelo Bash em uma lista (Uma lista no Bash é basicamente uma coleção de valores separados por um espaço ou uma nova linha )

Qualquer comando (s) a ser executado deve ser colocado dentro do fazer .. feito quadra.

Vejamos alguns exemplos simples.

Loop em uma faixa de valores inteiros: O código a seguir cria diretórios denominados dir1, dir2, dir3 até dir10.

para i em {1..10} faça mkdir dir $ i done

Loop em uma lista de valores fixos: O código a seguir imprime cada string ou inteiro na lista fixa fornecida.

for i in Hello 1 2 3 Bye! echo $ i done

Loop na saída de um comando: O código a seguir faz um loop sobre a saída de ls e imprime o nome de cada arquivo no formato fornecido.

para i em `ls` do echo" Nome do arquivo é $ i "concluído

Sintaxe baseada em expressão

Uma sintaxe baseada em expressão semelhante à linguagem de programação C também é possível no Bash:

for ((Expressão 1; Expressão 2; Expressão 3)) do ... ... concluído

Aqui, Expressão 1 é a inicialização da (s) variável (es) de índice. Expressão 2 é a condição em que o loop deve ser encerrado; esta condição é verificada a cada iteração. Expressão 3 especifica o incremento / decremento / modificação no valor das variáveis ​​de índice

O exemplo a seguir simplesmente imprime valores de 0 a 4:

for ((i = 0; i <5; i ++)) do echo $ i done

O exemplo a seguir cria um loop infinito, uma vez que nenhuma expressão está sendo especificada:

for ((;;)) do echo "Pressione Ctrl-C para parar" feito

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.

for ((i = 0; i <10; i ++)) faça if [[$ i -eq 5]] then break else echo $ i; fi feito

O loop 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. Por exemplo, o seguinte loop é interrompido se e quando encontra um arquivo vazio.

para arquivo em `ls` do flen =` wc -c $ file` if [["$ flen" = "0 $ file"]] then echo "$ file is empty" break else echo $ flen fi done 

O comando wc -c imprime o número de linhas no arquivo . Ele imprime no formato , por exemplo, 10 test.txt. Estamos saindo do loop quando o número de linhas é 0, ou seja, um arquivo vazio.

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

Semelhante ao C e muitas outras linguagens de programação, o 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.

for ((i = 0; i <10; i ++)) faça if [[$ i -eq 5]] então continue fi echo $ i; feito

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

No exemplo a seguir, imprimimos o número de linhas em um arquivo, e uma iteração particular irá Prosseguir se for um diretório e não um arquivo.

para o arquivo em `ls` faça if [[-d $ arquivo]] então continue fi wc -c" $ arquivo "feito

[[-d $ arquivo]] verifica se o arquivo é um diretório. Se for, então passamos para o próximo arquivo, ou seja, próxima iteração. Se não for um diretório, imprimimos o número de linhas do arquivo usando banheiro comando, como mostrado anteriormente também.

Usando Loops: Scripts e Linha de Comando

A sintaxe de loop pode ser usada diretamente no shell Bash ou a partir de um arquivo de script de shell. Uma vez por por 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 por loop no Bash é um recurso bastante simples, mas tem seu uso em quase todos os tipos de cenários de script complexos. Aprendê-lo é muito importante, quer você seja um usuário regular ou avançado do Linux, quer esteja começando a aprender automação para tarefas de administração de sistema e DevOps.