Bash 'For' Loop: tutorial ed esempi

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.