Utilizzo del ciclo "until" in uno script Bash per eseguire il ciclo 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 loop per ripetere più volte attività simili. In questo articolo impareremo come usare il Fino a
ciclo in Bash.
introduzione
Il Fino a
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 finché il comando condition continua a fallire (cioè, restituisce uno stato diverso da zero. Qualsiasi comando in Linux restituisce 0 in caso di successo e un numero intero diverso da zero in caso di errore). Questo è esattamente l'opposto di mentre
loop, in cui i comandi eseguiti continuano a funzionare fino a quando il comando della condizione non ha esito positivo.
Se sono presenti più comandi di condizione, l'istruzione considera solo lo stato dell'ultimo comando nell'elenco, ovvero il ciclo verrà eseguito finché l'ultimo comando nell'elenco continua a fallire.
Sintassi generale
La sintassi generale per Fino a
il ciclo in Bash è:
fino al termine
L'elenco dei comandi di esecuzione verrà eseguito fino a quando l'ultimo comando nell'elenco dei comandi delle condizioni non fallisce. Una volta che l'ultimo comando ha successo, il ciclo esce.
Gli utenti possono specificare qualsiasi file eseguibile negli elenchi di 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
è 10.
x=0 fino a [[ $x -eq 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
).
Poi dentro il fare...fatto
block, stampiamo semplicemente il valore di x e lo incrementiamo. Il ciclo termina una volta che il comando condition ha esito positivo, ovvero quando $x
è uguale a 10
.
Nota: La variabile index da utilizzare nel ciclo "until" deve essere inizializzata prima del ciclo "until" 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 fino a echo "Ciao" echo "Ciao" [[ $z -eq 5 ]] do echo "Creazione dir$z..." mkdir dir$z ((z++)) done
I primi comandi echo "Ciao" ed echo "Ciao" verranno eseguiti 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 questo comando continua a fallire, cioè finché il valore di z non è 5, i comandi di condizione e i comandi eseguiti continuano a funzionare in ordine. Qui, per ogni iterazione, eseguirà prima i 2 comandi echo in condition e quindi il 3° comando 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
un'istruzione, per un'uscita condizionale dal ciclo.
x=0 fino a [[ $x -eq 10 ]] do if [[ $x -eq 5 ]] break fi echo $x ((x++)) done
Il ciclo fino a sopra 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 fino a [[ $x -eq 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 Fino a
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 Fino a
loop è un'altra caratteristica importante negli script Bash. Ha particolare importanza negli script complessi quando ci si aspetta che un certo insieme di programmi restituisca lo stato di errore e alcuni altri comandi devono essere eseguiti per registrare l'errore, visualizzare l'errore in dettaglio o semplicemente eseguire alcuni programmi alternativi.