O versátil Bash for
loop faz muito mais do que fazer um loop em torno de um determinado número de vezes. Descrevemos suas muitas variantes para que você possa usá-las com sucesso em seus próprios scripts Linux.
índice
- O laço for
- simples para loops
- para loops usando listas numéricas
- para loops usando listas de palavras
- para loops com intervalos de números
- para loops usando nomes de arquivos
- para loops usando parâmetros de linha de comando
- Tipo C para loops
- infinito para loops
- para loops usando arrays de palavras
- O comando continuar
- O comando de quebra
- para loops usando arrays associativos
- Iterando sobre a saída de comandos
- O Deslumbrante para Loop
O laço for
Todas as linguagens de script e programação possuem alguma forma de lidar com loops. Um loop é uma seção de código que você deseja executar repetidamente. Em vez de escrever o mesmo conjunto de instruções em seu script repetidamente, um loop repetirá uma seção de código repetidamente para você.
a festa for
loop é muito flexível. Ele pode trabalhar com números, palavras, arrays, variáveis de linha de comando ou a saída de outros comandos. Eles são usados no cabeçalho do loop. O cabeçalho determina com o que o loop está trabalhando (números ou strings, por exemplo) e qual é a condição final que irá parar o loop.
O corpo do loop contém o código que você deseja que seja repetido. Contém o que você deseja que o loop faça . O corpo do loop pode conter qualquer comando de script válido.
Uma variável chamada contador de loop ou iterador é usada para percorrer um intervalo de valores ou uma lista de itens de dados. Para cada loop, o iterador assume o valor do próximo número, string ou qualquer tipo de dados sobre o qual o loop itera. Isso permite que o loop trabalhe nos valores de cada um dos itens de dados por sua vez, ou mesmo, em alguns casos, manipule os itens de dados em s.
simples para loops
Se você deseja escrever seu primeiro loop for, esses exemplos simples ajudarão você a começar.
para loops usando listas numéricas
Você pode executar um loop for
na linha de comando. Este comando cria e executa um simples for
circle. O iterador é uma variável chamada i
. vamos atribuir i
para ser cada um dos valores na lista de números, por sua vez. O corpo do loop imprimirá esse valor na janela do terminal. A condição que termina esse loop é quando i
iterou por toda a lista de números.
para i em 1 2 3 4 5; faça eco $i; doar
É importante notar aqui que a variável i
aumenta em um a cada vez que o loop gira, mas isso ocorre porque a lista de números aumenta em um a cada vez.
Essa lista de números começa em 3 e sobe em etapas de dois, depois salta arbitrariamente para 44.
para i em 3 5 7 9 11 44; faça eco $i; doar
Não faz diferença para o círculo for
. Comece em uma extremidade da lista e use cada valor por sua vez, até que todos os valores da lista tenham sido usados.
Também não é necessário que os números estejam em ordem crescente. Eles podem estar em qualquer ordem.
para i em 3 43 44 11 9; faça eco $i; doar
para loops usando listas de palavras
Podemos facilmente fazer o mesmo com as palavras. Copie o texto do script em um editor e salve-o como "word-list.sh".
#!/bin/bash for word in Esta é uma sequência de palavras do echo $word done
Você terá que usar chmod
para tornar o script executável e quaisquer outros scripts copiados deste artigo. Basta substituir o nome do script toda vez que você usar o domínio chmod
.
chmod +x lista de palavras.sh
Vamos executar o script.
./lista de palavras.sh
Assim como fez com os números, o iterador, neste exemplo, a variável word
: avança pela lista de itens de dados até chegar ao final da lista. O corpo do loop acessa o valor na variável word
e assim cada palavra na lista é processada.
para loops com intervalos de números
se você quisesse que um loop for
fosse executado 100 vezes, seria bastante tedioso ter que escrever uma sequência de 100 números no cabeçalho do loop. Os intervalos de números permitem especificar apenas o primeiro e o último número.
Este script é "number-range.sh".
#!/bin/bash for i em {1..10} faça echo "Loop spin:" $i done
O intervalo de números é definido entre colchetes " {}
"Com dois pontos" ..
"Separe os números que iniciam e terminam o intervalo. Certifique-se de não incluir espaços em branco na definição do intervalo.
É assim que funciona:
./number-range.sh
Você pode incluir outro número que defina o tamanho da etapa que o iterador deve usar para percorrer os números no intervalo. Este script, "number-range2.sh" usará um intervalo de 0 a 32 e um tamanho de etapa de 4.
#!/bin/bash for i em {0..32..4} faça echo "Loop spin:" $i done
O iterador percorre o intervalo de números em etapas de quatro.
./number-range2.sh
para loops usando nomes de arquivos
Como podemos processar listas de palavras, podemos fazer nossos scripts funcionarem com nomes de arquivos. Este script é chamado de "filenames.sh".
#!/bin/bash para arquivo em word-list.sh number-range.sh number-range2.sh filenames.sh do ls -lh "$file" done
Seria bastante inútil ter um script que apenas fizesse o que ls
pode fazer, mas demonstra como acessar nomes de arquivos dentro do corpo do loop.
./filenames.sh
Semelhante ao uso do intervalo de números, podemos usar um padrão de arquivo no cabeçalho do loop para especificar os arquivos que queremos processar. Isso economiza muita digitação e significa que não precisamos saber os nomes dos arquivos com antecedência.
Este script é chamado de "filenames2.sh". Substituímos a lista de nomes de arquivo pelo padrão de nome de arquivo "*.sh" para que o script relate todos os arquivos de script no diretório atual.
#!/bin/bash para arquivo em *.sh do ls -lh "$file" done
Aqui está a saída.
./filenames2.sh
para loops usando parâmetros de linha de comando
Podemos adicionar um pouco mais de flexibilidade passando o padrão de nome de arquivo na linha de comando. A variável $*
representa todos os parâmetros de linha de comando passados para o script.
Este é "filenames3.sh".
#!/bin/bash para arquivo em $* do ls -lh "$file" feito
Solicitaremos nomes de arquivos que comecem com "n" e tenham extensão SH.
./filenames3.sh n*.sh
Também podemos passar em mais de um padrão por vez.
./filenames3.sh n*.sh .bashrc
O file
de variável do iterador assume o valor de cada um dos parâmetros da linha de comando. Os padrões de nome de arquivo são expandidos e todos os nomes de arquivo são processados no corpo do loop.
Tipo C para loops
O Bash suporta o loop for clássico de três termos, como aqueles encontrados na linguagem de programação C. Eles são chamados de loops for de três termos porque existem três termos no cabeçalho do loop.
- O valor inicial do iterador de loop.
- O teste para saber se o loop continua ou termina.
- O incremento (ou decremento) do iterador.
Este script é "c-like.sh".
o iterador I
é definido como 1 no início do loop, e o loop será executado enquanto a instrução " i<=10
" for verdadeira. Assim que i
chegar a 11, o loop for
parará. O iterador é incrementado em um, a cada revolução do loop.
#!/bin/bash for (( i=1; i<=10; i++ )) do echo "Loop number:" $i done
Vamos executar este script.
./c-like.sh
O tipo de loop for
C permite a criação fácil de loops for
que possuem requisitos ligeiramente estranhos. Este loop começa em 15 e conta em etapas de 3. Isso é "c-like2.sh"
#!/bin/bash for (( i=15; i>0; i-=3 )) do echo "Loop number:" $i done
Quando o executamos, ele deve voltar em passos de três.
./c-like2.sh
infinito para loops
Você também pode usar esse formato de loop for
para criar um loop infinito. Tudo o que você precisa fazer é remover todos os elementos do cabeçalho do loop, assim. Este é "infinity.sh".
#!/bin/bash for (( ; ; )) do echo "Pressione Ctrl+C para parar..." sleep 1 done
Você deve pressionar Ctrl + C para parar o loop.
./infinite.sh
para loops usando arrays de palavras
Podemos facilmente iterar através de uma matriz de palavras. Precisamos fornecer o nome da matriz no cabeçalho do loop, e o iterador percorrerá todas as entradas da matriz. Este é "word-array.sh".
#!/bin/bash distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") para distro em $distributions do echo $distro done
Todas as distribuições estão listadas para nós.
./word-array.sh
O comando continuar
Se você quiser que o loop faça um loop em uma entrada específica, teste se o iterador corresponde a essa entrada e use o domínio continue
. O comando continue
deixa o turno atual do loop. Incrementa o iterador e inicia a próxima rodada do loop, assumindo que a entrada que você deseja pular não é o último item da lista.
Este é "word-array2.sh". Faz um loop sobre a entrada do array "Arc", mas processa todos os outros membros do array.
#!/bin/bash distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") para distro em $distributions faça if [[ "$distro" == "Arch" ]] ; então continue fi echo $distro feito
"Arc" não aparece na janela do terminal.
./word-array2.sh
O comando de quebra
O comando break
sai do loop e impede o processamento adicional.
Este é "word-array3.sh". É o mesmo que o script acima com continue
substituído por break
.
#!/bin/bash distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") para distro em $distributions faça if [[ "$distro" == "Arch" ]] ; então quebre fi echo $distro feito
Quando o iterador contém "Arch", o loop for abandona qualquer processamento adicional.
./word-array3.sh
para loops usando arrays associativos
No Bash 4 e posterior, os arrays associativos permitem que você crie listas de pares chave-valor que podem ser pesquisados por chave ou valor. Devido à relação bidirecional entre chave e valor, eles também são chamados de dicionários de dados.
Podemos iterar através de um array associativo usando um loop for
. Este script é "associative.sh". Define um array associativo com quatro entradas, cada uma de "dog", "cat", "robin" e "human". Estas são as chaves. Os valores são o número (padrão) de pernas que cada um possui.
#!/bin/bash declare -A animals=( [dog]=Quatro patas [cat]=Quatro patas [robin]=Duas patas [human]=Duas patas ) para pernas em ${!animals[@ ]} faça if [ ${animals[$legs]} == "Duas pernas" ]; então echo ${legs} fi feito
O iterador é chamado de legs
. Observe que o cabeçalho do loop contém um ponto de exclamação " !
". Isso não age como o operador lógico NOT, é parte da sintaxe do array associativo. É necessário pesquisar no array.
O corpo do loop executa um teste de comparação de strings. Se o valor do membro da matriz for "duas pernas", imprima o valor da chave na janela do terminal. Quando o executamos, o script imprime as criaturas de duas pernas.
./associative.sh
Iterando sobre a saída de comandos
Se você tiver um comando ou script que produza uma lista de algo, como nomes de arquivos, você pode percorrê-los com um loop for
. Você precisa ter cuidado com expansões inesperadas de nomes de arquivos, mas em casos simples, tudo bem.
Este script é "command.sh". usa ls
e wc
para fornecer uma lista ordenada de nomes de arquivos de script, juntamente com suas contagens de linhas, palavras e bytes.
#!/bin/bash para i em $(ls *.sh | sort); fazer eco $(wc $i) feito
Quando o executamos, obtemos estatísticas para cada arquivo, com os arquivos listados em ordem alfabética.
./command.sh
O Deslumbrante para Loop
O loop for
é uma ferramenta de script versátil e fácil de entender. Mas por mais flexível que seja, não se esqueça de que outros loops existem por um motivo. Não se engane pensando que o loop for
é tudo que você precisa.
O loop while
, por exemplo, é muito mais adequado para certas coisas do que o loop for
, como ler linhas de um arquivo.
Escrever bons scripts significa usar a ferramenta mais adequada para a tarefa em mãos. O loop for
é uma ótima ferramenta para ter em sua caixa de ferramentas de cheats.
- Como baixar o numero de telefone do grupo whatsapp
- Como mudar seu avatar no Snapchat?
descubra mais conteúdo
O que é um amplificador integrado?
Google Pixel Watch também tem detecção de queda, mas não até o próximo ano
As melhores xícaras de café aquecidas de 2022
Como automatizar seu iPhone com base na hora, atividade ou localização
"Isso deve ter sido antes do meu tempo"
Por que a NASA enviou Snoopy para a Lua? – Revisão Geek
O loop for é uma estrutura de controle em programação na qual o número máximo de iterações pode ser indicado antecipadamente.
O que é um loop for?
O loop for é usado para iterar pelos elementos de um objeto iterável (lista, tupla, conjunto, dicionário, …) e executar um bloco de código. Em cada etapa da iteração, um único elemento do objeto iterável é levado em consideração, no qual uma série de operações pode ser aplicada.
Para que serve a estrutura?
A estrutura repetitiva For (de) é aquela em que o número de iterações é conhecido antecipadamente e, portanto, nenhuma condição de saída é necessária para interromper o loop. Em vez disso, um contador conta o número de iterações fixas e termina quando atinge o valor final definido anteriormente.
O que é o loop for e while?
Geralmente precisamos repetir ações. Por exemplo, exibir os elementos de uma lista um após o outro ou simplesmente executar o mesmo código para cada número de 1 a 10. Os loops são uma forma de repetir o mesmo código várias vezes.
Quando o loop for é usado?
A instrução for permite que você repita uma instrução ou uma instrução composta um número especificado de vezes. O corpo de uma instrução for é executado zero ou mais vezes até que uma condição opcional seja falsa.