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.