Como escribir Bash WHILE-Loops

Comandos, sintaxe e exemplos

Pode executar unha secuencia de comandos escribíndoos nun ficheiro de script e executalo.

Un ficheiro de script é simplemente un ficheiro de texto, normalmente coa extensión de ficheiro .SH, que contén unha secuencia de instrucións que tamén se pode executar desde a liña de comandos ( shell ).

Mentres Exemplos Loop

Abaixo está un exemplo de ciclo de tempo. Cando se execute, este ficheiro de script imprimirá os números do 1 ao 9 na pantalla. A instrución while dá máis flexibilidade para especificar a condición de cancelación que o for-loop .

#! / bin / bash count = 1 mentres [$ count -le 9] fai eco "$ count" sleep 1 ((count ++)) feito

Por exemplo, pode facer que o script anterior sexa un ciclo infinito ao omitir a instrución de incrementos "((contador + +))":

#! / bin / bash count = 1 mentres [$ count -le 9] fai eco "$ count" sleep 1 done

A instrución "sleep 1" detén a ejecución durante 1 segundo en cada iteración. Use o atallo de teclado Ctrl + C para finalizar o proceso.

Tamén pode crear un ciclo infinito colocando un colon como a condición:

#! / bin / bash count = 1 mentres: faga eco "$ count" sleep 1 ((count + + +)) feito

Para usar múltiples condicións no while-loop, ten que usar a notación de dobre cadrado:

count = 1 done = 0 mentres [[$ count -le 9] && [$ done == 0]] fai eco "$ count" sleep 1 ((count ++)) se [$ count == 5]; entón $ fixo = 1 fi feito

Neste script, a variable "feito" inicialízase a 0 e despois configúrase en 1 cando a conta chega a 5. A condición de loop indica que o ciclo while continuará mentres o "contar" sexa menor de nove e "feito" sexa igual a cero. Polo tanto, os loops saen cando a conta é igual a 5.

O "&&" significa lóxico "e" e "||" significa "ou" lóxico.

Unha notación alternativa para as conxuncións "e" e "ou" nas condicións é "-a" e "-o" con corchetes simples. A condición anterior:

[[$ count -le 9] && [$ fixo == 0]]

... podería ser reescrito como:

[$ count -le 9] -a [$ fixo == 0]

A lectura dun ficheiro de texto normalmente faise cun ciclo de tempo. No seguinte exemplo, o script bash le o contido liña por liña dun ficheiro chamado "inventory.txt:"

FILE = inventory.txt exec 6

A primeira liña asigna o nome do ficheiro de entrada á variable "FILE". A segunda liña guarda a "entrada estándar" no descriptor de ficheiro "6" (podería ser calquera valor entre 3 e 9). Isto faise para que "entrada estándar" poida ser restaurado para o descriptor de ficheiro "0" ao final do script (vexa a instrución "exec 0 Na 3 ª liña o ficheiro de entrada está asignado ao descriptor de ficheiro" 0 "que se usa para entrada estándar. A instrución "ler" entón le unha liña do ficheiro en cada iteración e asigna á variable "line1".

Para saír prematuramente dun ciclo de tempo, pode usar a declaración de ruptura como esta:

conta = 1 feito = 0 mentres [$ count -le 9] faga eco "$ count" durmir 1 ((contar + +)) se [$ count == 5] entón rompe finalizar eco Terminado

A declaración de fracaso salta a execución do programa ao final mentres loea e executa as declaracións que a seguen. Neste caso, o comunicado "eco rematado".

A declaración de continuar, por outra banda, só salta o resto da instrución de loop da iteración actual e salta directamente á seguinte iteración:

count = 1 done = 0 mentres [$ count -le 9] faga durmir 1 ((contar + + +)) se [$ count == 5] entón continúa echo "$ count" echo feito Terminado

Neste caso, a instrución "continuar" execútase cando a variable "conteo" alcanza 5. Isto significa que a seguinte declaración (eco "$ count") non se executa con esta iteración (cando o valor de "contar" é 5).