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 per
ciclo in Bash.
introduzione
Un tipico script Bash contiene una serie di comandi da eseguire uno dopo l'altro. Le variabili possono essere utilizzate per memorizzare stringhe, valori di indici interi, risultati di un comando, ecc. I cicli sono necessari quando l'utente desidera eseguire un particolare comando più volte. È particolarmente utile quando l'output di un comando è sotto forma di elenco e su ciascun risultato, nell'elenco, deve essere eseguito un secondo comando.
Sintassi generale
La sintassi generale per per
il ciclo in Bash è:
perché nel fare ... ... fatto
qui, il è una variabile Bash, che deve essere un nome di variabile shell Linux valido, ovvero il nome contiene una combinazione di lettere (az, AZ), numeri (0-9) e trattino basso ( _ ) e deve iniziare con una lettera o un trattino basso.
Il è un intervallo personalizzato di indici interi che verrà ripetuto o un elenco personalizzato di numeri interi o stringhe. Può contenere anche un altro comando Linux, tuttavia, l'output di tale comando deve essere separato da spazi o caratteri di nuova riga, ad esempio analizzabile da Bash in una lista (una lista in Bash è fondamentalmente una raccolta di valori separati da uno spazio o una nuova riga ).
Qualsiasi comando da eseguire deve essere posizionato all'interno del fare..fatto
bloccare.
Vediamo alcuni semplici esempi.
Ciclo su un intervallo di valori interi: Il codice seguente crea directory denominate dir1, dir2, dir3 fino a dir10.
for i in {1..10} do mkdir dir$i done
Ciclo su un elenco di valori fissi: Il codice seguente stampa ogni stringa o numero intero nell'elenco fisso specificato.
per io in Ciao 1 2 3 Ciao! fai echo $ho fatto
Ciclo sull'output di un comando: Il seguente codice viene eseguito in loop sull'output di ls
e stampa il nome di ogni file nel formato specificato.
for i in `ls` do echo "Il nome del file è $i" done
Sintassi basata su espressioni
In Bash è possibile anche una sintassi basata su espressioni simile al linguaggio di programmazione C:
for ((Espressione 1; Espressione 2; Espressione 3)) do ... ... done
Qui, Espressione 1
è l'inizializzazione delle variabili indice. Espressione 2
è la condizione alla quale si deve uscire dal ciclo; questa condizione viene verificata in ogni iterazione. Espressione 3
specifica l'incremento/decremento/modifica del valore della/e variabile/i indice
L'esempio seguente stampa semplicemente i valori da 0 a 4:
for ((i=0;i<5;i++)) do echo $i done
L'esempio seguente crea un ciclo infinito, poiché non viene specificata alcuna espressione:
for (( ; ; )) do echo "Premi Ctrl-C per interrompere" done
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.
for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i; fi fatto
Il ciclo 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. Ad esempio, il ciclo seguente si interrompe se e quando trova un file vuoto.
for file in `ls` do flen=`wc -c $file` if [[ "$flen" = "0 $file" ]] then echo "$file è vuoto" break else echo $flen fi done
Il comando wc -c
stampa il numero di righe nel file . Lo stampa nel formato
, Per esempio,
10 test.txt
. Stiamo uscendo dal ciclo quando il numero di righe è 0, cioè un file vuoto.
Continua istruzione per saltare un'iterazione in modo condizionale
Simile a C e molti altri linguaggi di programmazione, anche bash ha un Continua
istruzione, per saltare la parte rimanente di un'iterazione in un ciclo se una particolare condizione è soddisfatta.
for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then continue fi echo $i; fatto
Il ciclo precedente stamperà i numeri da 0 a 10, tranne 5, perché durante l'iterazione di io=5
c'è un'istruzione continue, che salterà il resto del codice nel ciclo all'inizio con l'iterazione di io=6
.
Nell'esempio seguente, stampiamo il numero di righe in un file e una particolare iterazione lo farà Continua
se è una directory e non un file.
for file in `ls` do if [[ -d $file ]] quindi continua fi wc -c "$file" done
[[ -d $file ]]
controlla se il file è una directory. Se lo è, allora passiamo al file successivo, cioè alla prossima iterazione. Se non è una directory, stampiamo il numero di righe nel file usando WC
comando, come mostrato anche in precedenza.
Utilizzo dei loop: script e riga di comando
La sintassi del ciclo può essere utilizzata direttamente nella shell Bash o da un file di script della shell. una volta per
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 per
loop in Bash è una funzionalità piuttosto semplice ma trova il suo utilizzo in quasi tutti i tipi di scenari di scripting complessi. Impararlo fa molto, che tu sia un utente Linux normale o avanzato o che inizi a imparare l'automazione per le attività di amministrazione del sistema e DevOps.