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.