Como escribir un BASH "para" Loop

Como usar o BASH "for" loop nos scripts de shell

BASH (que significa Bourne Again Shell) é unha linguaxe de script empregado pola maioría dos sistemas operativos Linux e UNIX.

Pode executar comandos BASH dentro dunha xanela de terminal unha despois da outra ou pode engadir os comandos a un ficheiro de texto para producir un script shell.

A gran cousa sobre escribir scripts de shell é que podes executalos de novo e de novo. Por exemplo, imaxina que precisa engadir un usuario a un sistema, establecer os seus permisos e xestionar o seu ambiente de partida. Pode escribir os comandos nun anaco de papel e executalos a medida que engada novos usuarios ou pode escribir un único script e só pasar parámetros a ese script.

Os idiomas de script como BASH teñen construcións de programación similares que outros idiomas. Por exemplo, pode usar parámetros de importación para obter entrada do teclado e gardalos como variables. Pode obter o script para realizar unha acción determinada en función do valor dos parámetros de entrada .

Unha parte clave de calquera linguaxe de programación e script é a capacidade de executar unha e outra vez o mesmo código.

Hai varias formas de repetir o código (tamén coñecido como loops). Nesta guía, mostraráselle como escribir un ciclo "for".

A for loop repite unha determinada sección do código unha e outra vez. Son útiles para que unha serie de comandos poidan seguir funcionando ata que se atope unha condición particular, despois de que eles van parar.

Nesta guía, mostraráselle cinco xeitos de usar o for loop dentro dun script BASH.

Antes de comezar

Antes de comezar cos exemplos for loop, necesitará abrir unha xanela de terminal e seguir estes pasos:

  1. Introduce os scripts mkdir ( Aprende máis sobre mkdir aquí )
  2. Introduce scripts de cd (isto cambia o directorio a scripts )
  3. Escribe nano examplen.sh (onde n é o exemplo en que estás traballando)
  4. Introduce o script
  5. Prema CTRL + O para gardar e CTRL + X para saír
  6. Executa bash examplen.sh (de novo, sendo n o exemplo co que estás traballando)

Como atravesar unha lista

#! / bin / bash
para o número en 1 2 3 4 5
facer
eco $ número
feito
saia de 0

A forma BASH de usar "for" loops é un tanto diferente á forma na que a maioría dos outros idiomas de programación e script controla "para" loops. Imos romper o script cara a abaixo ...

Nun BASH "for" loop todo, as declaracións entre facer e facer son realizadas unha vez por cada elemento da lista.

No exemplo anterior, a lista é todo o que vén despois da palabra (ie 1 2 3 4 5).

Cada vez que o loop itera, o seguinte valor da lista insírese na variable especificada despois da palabra "para" . No ciclo anterior, a variable chámase número .

A declaración de eco úsase para mostrar información á pantalla.

Polo tanto, este exemplo leva os números do 1 ao 5 e os mostra un a un á pantalla:

Como facer unha bucle entre un punto de inicio e final

O problema co exemplo anterior é que se quere procesar unha lista máis grande (digamos de 1 a 500), tardaríase en escribir todos os números en primeiro lugar.

Isto lévanos ao segundo exemplo que mostra como especificar un punto de inicio e final:

#! / bin / bash
para o número en {1..10}
facer
eco "$ number"
feito
saia de 0

As regras son basicamente as mesmas. Os valores despois da palabra " in" compoñen a lista por iteración e cada valor na lista sitúase na variable (é dicir, número), e cada vez que o iterate loop, as declaracións entre facer e facer son realizadas.

A principal diferenza é a forma na que se forma a lista. Os corchetes {} basicamente denotan un intervalo, eo rango, neste caso, é de 1 a 10 (os dous puntos separan o inicio e o final dun intervalo).

Este exemplo, polo tanto, percorre cada número entre 1 e 10 e mostra o número á pantalla do seguinte xeito:

O mesmo circuito podería escribirse así, con sintaxe idéntica ao primeiro exemplo:

por número en 1 2 3 4 5 6 7 8 9 10

Como saltar os números nun intervalo

O exemplo anterior mostrou como facer un ciclo entre o punto de inicio e o final, entón agora veremos como saltar os números no intervalo.

Imaxina que queres facer un ciclo entre 0 e 100, pero só mostres cada décimo número. O seguinte script mostra como facer exactamente iso:

#! / bin / bash
para o número en {0..100..10}
facer
eco "$ number"
feito
saia de 0

As regras son basicamente as mesmas. Hai unha lista, unha variable e un conxunto de declaracións que se deben realizar entre facer e facer . A lista esta vez é así: {0..100..10}.

O primeiro número é 0 eo número final é 100. O terceiro número (10) é o número de elementos da lista que saltará.

O exemplo anterior, polo tanto, mostra a seguinte saída:

Un aspecto máis tradicional

A forma BASH de escribir para loops é un pouco raro cando se compara con outros idiomas de programación.

Non obstante, podes escribir un ciclo de texto nun estilo similar á linguaxe de programación C, así:

#! / bin / bash
para ((número = 1; número <100; número ++))
{
se (($ number% 5 == 0))
entón
eco "$ number é divisible por 5"
fi
}
saia de 0

O ciclo comeza establecendo o número de variable a 1 (número = 1 ). O ciclo manterá a iteración mentres que o valor dun número é inferior a 100 ( número <100 ). O valor do número cambia engadiulles 1 despois de cada iteración ( número ++ ).

Todo entre as chaves curvas realízase a través de cada iteración do ciclo.

O bit entre os aparellos verifica o valor dun número , divídese en 5 e compara o resto en 0. Se o resto é 0, o número é divisible por 5 e, a continuación, móstrase na pantalla.

Por exemplo:

Se desexa cambiar o tamaño do paso da iteración pode modificar o número de sección + para ser número = número + 2 , número = número + 5 ou número = número + 10 etc.

Isto pódese reducir aínda máis ao número + = 2 ou ao número + = 5 .

Un exemplo práctico

Para loops pode facer máis que listas de números de iteración. Pode usar a saída de outros comandos como a lista.

O seguinte exemplo mostra como converter arquivos de audio de MP3 a WAV :

#! / bin / bash

A lista deste exemplo é cada ficheiro coa extensión .MP3 no cartafol actual e a variable é un ficheiro .

O comando mpg converte o ficheiro MP3 en WAV. Non obstante, probablemente necesite instalar isto usando o seu xestor de paquetes primeiro.