Com escriure Bash WHILE-Loops

Ordres, sintaxi i exemples

Podeu executar una seqüència d'ordres escrivint-los en un fitxer de seqüència i després executar-lo.

Un fitxer de seqüència és simplement un fitxer de text, normalment amb l'extensió de fitxer .SH, que conté una seqüència d'instruccions que també es pot executar des de la línia d'ordres ( shell ).

Mentre hi ha exemples de bucle

A continuació es mostra un exemple de bucle de temps. Quan s'executi, aquest fitxer de seqüència imprimirà els números del 1 al 9 a la pantalla. La instrucció while ofereix més flexibilitat per especificar la condició de finalització que el for-loop .

#! / bin / bash count = 1, mentre que [$ count -le 9] fes eco "$ count" sleep 1 ((count + +)) done

Per exemple, podeu fer que el guió anterior sigui un bucle infinit ometent la instrucció d'increment "((comptar + +))":

#! / bin / bash count = 1 mentre que [$ count -le 9] feu eco "$ count" sleep 1 done

La instrucció "Sleep 1" deté l'execució durant 1 segon en cada iteració. Utilitzeu la drecera del teclat Ctrl + C per finalitzar el procés.

També podeu crear un bucle infinit posant un còlon com a condició:

#! / bin / bash count = 1 while: do echo "$ count" sleep 1 ((count + +)) done

Per utilitzar diverses condicions en el bucle while-loop, heu d'utilitzar la notació de doble quadrat:

Count = 1 done = 0 mentre que [[$ count -le 9] && [$ done == 0]] feu eco "$ count" sleep 1 ((count + +)) if [$ count == 5]; llavors $ done = 1 fi fet

En aquest script, la variable "fet" s'inicialitza a 0 i després s'estableix en 1 quan el recompte arriba a 5. La condició de bucle estableix que el bucle while continuarà mentre el "recompte" sigui menor de nou i "fet" sigui igual a zero. Per tant, els bucles surten quan el recompte és igual a 5.

El "&&" significa "lògic" i "i" || " significa "o" lògic.

Una notació alternativa per a les conjuncions "i" i "o" en condicions és "-a" i "-o" amb claudàtors individuals. La condició anterior:

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

... podria reescriure's com:

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

Llegir un fitxer de text normalment es fa amb un bucle de temps. En el següent exemple, l'script bash llegeix la línia de continguts per línia d'un fitxer anomenat "inventory.txt:"

FILE = inventory.txt exec 6

La primera línia assigna el nom del fitxer d'entrada a la variable "FILE". La segona línia desa la "entrada estàndard" al descriptor de fitxer "6" (podria ser qualsevol valor entre 3 i 9). Això es fa perquè es pugui restaurar l'entrada estàndard al descriptor de fitxer "0" al final de la seqüència de comandaments (vegeu la instrucció "exec 0 En la tercera línia, el fitxer d'entrada està assignat al descriptor de fitxer" 0 ", que s'utilitza per a l'entrada estàndard. La instrucció "llegir" llegeix una línia del fitxer en cada iteració i la assigna a la variable "line1".

Per sortir prematurament d'un bucle de temps, podeu utilitzar la declaració de ruptura com aquesta:

compte = 1 fet = 0 mentre que [$ count -le 9] fes eco "$ count" sleep 1 ((count + +))) si [$ count == 5] llavors fracciona echo acabat

La instrucció break reprèn l'execució del programa fins al final mentre loop i executa les declaracions següents. En aquest cas, l'extracte "echo acabat".

La declaració de continuar, d'altra banda, només omet la resta de la instrucció while loop de la iteració actual i salta directament a la següent iteració:

compte = 1 feta = 0 mentre que [$ count -le 9] duu a dormir 1 ((compte + + +)) si [$ count == 5], llavors continueu-fi "$ count" done echo Completed

En aquest cas, la instrucció "continuar" s'executa quan la variable "compte" arriba a 5. Això significa que la sentència posterior (echo "$ count") no s'executa en aquesta iteració (quan el valor de "compte" és 5).