Bash 'While' Loop: tutorial ed esempi

Utilizzo del ciclo "while" negli script Bash per eseguire l'iterazione sui comandi.

Bash (Bourne Again Shell) è un prompt dei comandi della shell e un linguaggio di scripting nei sistemi operativi GNU/Linux. È la shell predefinita per la maggior parte delle distribuzioni Linux.

Come la maggior parte dei linguaggi di scripting, Bash fornisce sintassi di ciclo per ripetere più volte attività simili. In questo articolo impareremo come usare il mentre ciclo in Bash.

introduzione

Il mentre loop in Bash viene utilizzato per eseguire comandi (comandi eseguiti) più volte in base all'output di un altro comando (i) (comandi di condizione). I comandi eseguiti continueranno a essere eseguiti fino a quando il comando condition non viene eseguito correttamente (ovvero, restituisce uno stato 0. Qualsiasi comando in Linux restituisce 0 in caso di successo e un numero intero diverso da zero in caso di errore).

Se sono presenti più comandi di condizione, l'istruzione considera solo lo stato dell'ultimo comando nell'elenco, ovvero il ciclo viene eseguito fino a quando l'ultimo comando nell'elenco viene eseguito correttamente.

Sintassi generale

La sintassi generale per mentre il ciclo in Bash è:

mentre fatto

L'elenco dei comandi di esecuzione continuerà a essere eseguito finché l'ultimo comando nell'elenco dei comandi di condizione non viene eseguito correttamente ed esce con lo stato 0. Nell'iterazione, quando l'ultimo comando di condizione fallisce, il ciclo termina.

L'utente può specificare qualsiasi file eseguibile negli elenchi dei comandi. Possono essere programmi Linux standard o programmi utente o script personalizzati. Ogni comando dovrebbe trovarsi su una nuova riga o separato da un punto e virgola sulla stessa riga.

Vediamo alcuni esempi.

Il ciclo finché una variabile ha un valore particolare: Il ciclo seguente viene eseguito fino al valore della variabile X non è uguale a 10.

x=0 while [[ $x -ne 10 ]] do echo $x ((x++)) done

In ogni iterazione, stiamo controllando se il valore di x è 10. Il valore viene controllato usando il test comando. [[ Espressione ]] è la sintassi per il comando test (vedi prova uomo). Qui dato che stiamo usando il -ne (che sta per "non uguale a"), il comando di test restituisce 0, ovvero successo, se il valore di x è diverso da 10, e restituisce un valore diverso da zero, ovvero fallimento se il valore di x è 10.

Poi dentro il fare...fatto block, stampiamo il valore di x e lo incrementiamo. Una volta che il valore di x è 10, il comando test restituisce uno stato diverso da zero e il ciclo termina.

Nota: La variabile indice da utilizzare nel ciclo while deve essere inizializzata prima del ciclo while o nei comandi condition, al contrario del ciclo for, che consente di inizializzare una variabile in modo implicito.

Con più comandi di condizione: Il ciclo seguente crea 5 directory denominate dir0, dir1, ... dir4.

z=0 while echo "Elenco dei file:" ls -l [[ $z -ne 5 ]] do echo "Creazione dir$z..." mkdir dir$z ((z++)) done

Primi comandi echo "Elenco dei file:" e ls -l verrà eseguito una volta completamente; il loro successo o fallimento non ha alcun impatto sulla durata del ciclo.

Quindi verrà eseguito il comando test per verificare il valore della variabile z. Fino a quando il valore di z non è 5, il comando test restituisce lo stato di successo e quindi il ciclo continua a funzionare. I comandi di condizione e i comandi eseguiti continuano a funzionare in ordine. Qui, per ogni iterazione, eseguirà prima il comando echo e il comando ls in condition, quindi il comando 3rd condition verificherà il valore di z. Se non è 5, entra nel ciclo ed esegue i comandi dati.

Interrompi e continua

Dichiarazione di interruzione per l'uscita condizionale

Possiamo anche usare l'istruzione condizionale Se all'interno del ciclo. Il Se l'istruzione può essere utilizzata con a rottura istruzione, per un'uscita condizionale dal ciclo.

x=0 while [[ $x -ne 10 ]] do if [[ $x -eq 5 ]] break fi echo $x ((x++)) done

Il ciclo while precedente stamperà i numeri da 0 a 4. Quindi, quando il valore di i è 5, uscirà dal ciclo. Ciò è particolarmente utile quando si deve uscire da un ciclo quando un comando fornisce un output specifico.

Continua istruzione per saltare un'iterazione in modo condizionale

Bash ha anche un Continua istruzione, per saltare la parte rimanente di un'iterazione in un ciclo se una particolare condizione è soddisfatta.

x=0 while [[ $x -ne 10 ]] do if [[ $x -eq 5 ]] continue fi echo $x ((x++)) done

Il ciclo precedente stamperà i numeri da 0 a 10, tranne 5, perché durante l'iterazione di x=5 c'è un'istruzione continue, che salterà il resto del codice nel ciclo all'inizio con l'iterazione di x=6.

Utilizzo dei loop: script e riga di comando

Le sintassi del ciclo possono essere utilizzate direttamente nella shell Bash o da un file script eseguibile della shell. Simile a per e mentre loop, una volta e mentre la sintassi del ciclo viene immessa nella shell, la shell continua il prompt per consentire all'utente di continuare i comandi da ripetere.

Oppure l'utente può salvarlo in un file di script ed eseguire il file di script.

Il #!/bin/bash all'inizio specifica l'interprete da utilizzare quando viene eseguito il file. Sebbene Bash sia la shell più comunemente usata al giorno d'oggi, alcuni utenti preferiscono shell come zsh, che dovrebbe essere specificato al posto di bash all'inizio di questo file.

Per dare i permessi di esecuzione per questo file, esegui:

chmod +x test.sh

Infine, per eseguire il file, correre:

./test.sh

Conclusione

Il mentre ciclo, simile a per e Fino a i loop sono una caratteristica importante negli script Bash. Il ciclo While ha un uso simile al ciclo Until, tranne per il fatto che viene utilizzato per eseguire comandi/programmi alternativi quando un particolare programma ha esito positivo. Questo trova spesso la sua utilità negli script di rete avanzati, negli script di manutenzione del sistema, ecc.