There are two types of bash for loops available. Um usando a palavra-chave ” in ” com lista de valores, outro usando a programação C como sintaxe.
Este artigo faz parte da nossa série de tutoriais on-going bash.
isto explica tanto a bash para os métodos de loop, e fornece 12 exemplos diferentes sobre como usar a bash para o loop em seus scripts shell.
marcar este artigo para referência futura, Uma vez que este é o único artigo que você precisaria para se referir sobre como usar a bash para loops com exemplos.,
Method 1: Bash For Loop using “in”and list of values
Syntax:
for varname in listdo command1 command2 ..done
In the above syntax:
- for, in, do and done are keywords
- “list” contains list of values. A lista pode ser uma variável que contém várias palavras separadas por espaços. Se a lista está faltando na declaração for, então ela toma o parâmetro posicional que foram passados para a shell.
- varname é qualquer variável Bash.
nesta forma, a instrução for executa os comandos incluídos em um corpo, uma vez para cada item da lista., Por exemplo, se a lista de valores contiver 5 itens, o loop for será executado um total de 5 vezes, uma vez para cada item da lista. O item atual da lista será armazenado em uma variável “varname” cada vez através do loop. Este “varname” pode ser processado no corpo do laço for.
Method 2: Bash For Loop using C like syntax
a segunda forma do for loop é semelhante ao for loop na linguagem de programação “C”, que tem três expressões (inicialização, condição e atualização).,
for (( expr1; expr2; expr3 ))do command1 command2 ..done
No exemplo acima bash para a sintaxe de comando,
- Antes da primeira iteração, expr1 é avaliada. Isto é normalmente usado para inicializar variáveis para o loop.todas as declarações entre fazer e fazer são executadas repetidamente até que o valor de expr2 seja verdadeiro.
- Após cada iteração do laço, expr3 é avaliado. Isto é normalmente usado para incrementar um contador de loop.
os 12 exemplos que se seguem mostram como bater por laços de maneiras diferentes.,
valores estáticos para a lista após a palavra-chave” in ”
no exemplo seguinte, a lista de valores (Mon, Tue, Wed, Thu e Fri) são dados diretamente após a palavra-chave “in” na bash para o laço.atenção: a lista de valores não deve ser separada por vírgulas (Seg, Ter, Qua, Qui, Fri). A vírgula será tratada como parte do valor. isto é, em vez de “Mon”, ele vai usar “Mon”, como valor como mostrado no exemplo abaixo.
precaução: a lista de valores não deve ser incluída numa citação dupla. (“Seg Ter Qua Qui Sex”)., Se você fechar em aspas duplas, ele será tratado como um único valor (em vez de 5 valores diferentes), como mostrado no exemplo abaixo.
$ cat for1-wrong2.shi=1for day in "Mon Tue Wed Thu Fri"do echo "Weekday $((i++)) : $day"done$ ./for1-wrong2.shWeekday 1 : Mon Tue Wed Thu Fri
a Variável para a lista, depois de “na” palavra-chave
em Vez de fornecer os valores diretamente no loop, você pode armazenar os valores em uma variável e usar a variável do loop após o “na” palavra-chave, como mostrado no exemplo a seguir.
cuidado: como uma boa prática, você deve sempre citar as variáveis bash quando você está referindo. Existem poucas excepções a esta regra das melhores práticas. Este é um deles., Se você citar duas vezes a variável neste loop, a lista de valores será tratada como um único valor. Muitas pessoas caem nesta armadilha. Tenha cuidado e não citar duas vezes a sua variável no laço for.
não indique a lista; obtê-la-á a partir dos parâmetros posicionais
Se não indicar a palavra-chave “in” seguida de qualquer lista de valores na bash para o ciclo, irá usar os parâmetros posicionais (i. e. Os argumentos que são passados ao programa da linha de comandos).Atenção: Por favor tenha cuidado se utilizar este método. Você não deve incluir a palavra-chave “in” no laço for., Se você deixar a palavra-chave “in” sem quaisquer valores, ela não irá usar o parâmetro posicional como mostrado abaixo. Não vai entrar no circuito. i. e. Para o loop nunca será executado como mostrado no exemplo abaixo.
$ cat for3-wrong.shi=1for day indo echo "Weekday $((i++)) : $day"done$ ./for3-wrong.sh Mon Tue Wed Thu Fri
Nota: Consulte o nosso artigo anterior para entender mais sobre os parâmetros posicionais da bash.
saída de comandos Unix como valores de lista após a palavra-chave “in”
você pode usar a saída de qualquer comando UNIX / Linux como lista de valores para o laço for, cercando o comando em ` back-ticks ` ‘ como mostrado abaixo.,
Loop através de arquivos e diretórios em um loop
para loop através de arquivos e diretórios sob um diretório específico, apenas cd para esse diretório, e dar * no loop for como mostrado abaixo.
O exemplo seguinte irá percorrer todos os ficheiros e pastas sob a sua pasta pessoal.
A utilização de * in The bash for loop é semelhante à globulação de arquivos que usamos na linha de comando linux quando usamos o comando ls (e outros comandos).
Por exemplo, o seguinte irá mostrar todos os ficheiros e pastas sob a sua pasta pessoal., Este é o conceito que é usado no acima for5.sh exemplo.
cd ~ls *
o seguinte mostrará todos os *.o arquivo conf que começa com a, b, ou, c ou d Em /etc diretório.
$ ls -1 /etc/*.conf/etc/asound.conf/etc/autofs_ldap_auth.conf/etc/cas.conf/etc/cgconfig.conf/etc/cgrules.conf/etc/dracut.conf
o mesmo argumento que é usado no comando ls acima, pode ser usado em uma bash para o loop, como mostrado no exemplo abaixo.
sair do ciclo for
pode sair de um ciclo for usando o comando ‘break’ como mostrado abaixo.,
$ cat for6.shi=1for day in Mon Tue Wed Thu Frido echo "Weekday $((i++)) : $day" if ; then break; fidone$ ./for6.shWeekday 1 : MonWeekday 2 : Tue
Continuar a partir do topo do loop
Sob determinadas condições, você pode ignorar o resto dos comandos no loop, e continuar o ciclo a partir do topo de novo (para o próximo valor na lista), usando o comando continuar como mostrado abaixo.
o seguinte exemplo adiciona ” (fim de semana) “para Sat e sol, e” (dia de semana) ” para o resto dos dias.
Bash for loop using C program syntax
This example uses the 2nd method of bash for loop, which is similar to the C for loop syntax., O exemplo seguinte gera 5 números aleatórios usando o estilo bash C para o loop.
9. A Bash infinita para o loop
quando você não fornece o início, condição e incremento no estilo bash c para o loop, ele se tornará um loop infinito. Precisa de carregar em Ctrl-C para parar o ciclo.
$ cat for9.shi=1;for (( ; ; ))do sleep $i echo "Number: $((i++))"done
Como dissemos acima, carregue em Ctrl-C para sair desta bash infinite por exemplo de loop.,
$ ./for9.shNumber: 1Number: 2Number: 3
usando vírgula no estilo bash c para loop
no loop estilo bash c, além do incremento do valor que é usado na condição, você também pode incrementar algum outro valor como mostrado abaixo.
na secção inicializar e na secção incremental do estilo-C bash para o loop, poderá ter vários valores separando-se com vírgula Como mostrado abaixo.
o seguinte para o loop é executado um total de 5 vezes, usando a variável I. No entanto, a variável j começa com 5, e obter incremento de 5 cada vez que o loop é executado.,
$ cat for10.shfor ((i=1, j=10; i <= 5 ; i++, j=j+5))do echo "Number $i: $j"done$ ./for10.shNumber 1: 10Number 2: 15Number 3: 20Number 4: 25Number 5: 30
Range of numbers after “in” keyword
you can loop through using range of numbers in the for loop “in” using brace expansion.
O exemplo a seguir passa 10 vezes usando os valores de 1 a 10.
$ cat for11.shfor num in {1..10}do echo "Number: $num"done$ ./for11.shNumber: 1Number: 2Number: 3Number: 4Number: 5...
Gama de números com incrementos após a palavra-chave “in”
o seguinte exemplo faz loops até 5 vezes usando os valores de 1 a 10, com um incremento de 2. isto é, começa com 1, e continua a aumentar em 2, até atingir 10.,
$ cat for12.shfor num in {1..10..2}do echo "Number: $num"done$ ./for12.shNumber: 1Number: 3Number: 5Number: 7Number: 9
PS: não se esqueça de marcar este artigo para a sua futura referência.
Se você gostou deste artigo, também poderá gostar..
|
|