12 Bash For Loop Esempi per lo Scripting della shell Linux

12 Bash For Loop Esempi per lo Scripting della shell Linux

Sono disponibili due tipi di bash for loop. Uno che usa la parola chiave ” in ” con l’elenco dei valori, un altro che usa la programmazione C come sintassi.

Questo articolo fa parte della nostra serie di tutorial bash in corso.

Questo spiega entrambi i metodi bash for loop e fornisce 12 diversi esempi su come utilizzare il ciclo bash for negli script della shell.
Bookmark questo articolo per riferimento futuro, in quanto questo è l’unico articolo si avrebbe mai bisogno di fare riferimento su come utilizzare bash per loop con esempi.,

Metodo 1: Bash Per ciclo utilizzando “in” e l’elenco dei valori

Sintassi:

for varname in listdo command1 command2 ..done

Nella sintassi di cui sopra:

  • for, in, do e done sono parole chiave
  • “list” contiene l’elenco dei valori. L’elenco può essere una variabile che contiene più parole separate da spazi. Se list manca nell’istruzione for, prende il parametro posizionale che è stato passato nella shell.
  • varname è un nome di variabile Bash.

In questa forma, l’istruzione for esegue i comandi racchiusi in un corpo, una volta per ogni elemento dell’elenco., Ad esempio, se l’elenco di valori contiene 5 elementi, il ciclo for verrà eseguito un totale di 5 volte, una volta per ogni elemento nell’elenco. L’elemento corrente dall’elenco verrà memorizzato in una variabile “varname” ogni volta attraverso il ciclo. Questo “varname” può essere elaborato nel corpo del ciclo for.

Metodo 2: Bash For Loop usando la sintassi simile a C

La seconda forma del ciclo for è simile al ciclo for nel linguaggio di programmazione “C”, che ha tre espressioni (inizializzazione, condizione e aggiornamento).,

for (( expr1; expr2; expr3 ))do command1 command2 ..done

Nella bash per la sintassi del comando,

  • prima della Prima iterazione, expr1 è valutato. Questo viene solitamente utilizzato per inizializzare le variabili per il ciclo.
  • Tutte le istruzioni tra do e done vengono eseguite ripetutamente fino a quando il valore di expr2 è TRUE.
  • Dopo ogni iterazione del ciclo, expr3 viene valutato. Questo viene solitamente utilizzato per incrementare un contatore di loop.

I seguenti 12 esempi mostrano come bash per loop in modi diversi.,

Valori statici per l’elenco dopo la parola chiave “in”

Nell’esempio seguente, l’elenco dei valori (Mon, Mar, Mer, Gio e Ven) viene fornito direttamente dopo la parola chiave “in” nel ciclo bash for.

Attenzione: L’elenco dei valori non deve essere separato da una virgola (Lun, Mar, Mer, Gio, Ven). La virgola sarà trattata come parte del valore. cioè invece di” Mon”, userà” Mon ” come valore come mostrato nell’esempio seguente.

Attenzione: l’elenco dei valori non deve essere racchiuso tra virgolette doppie. (“Mon Tue Wed Gio Ven”)., Se racchiudi tra virgolette, verrà trattato come un singolo valore (invece di 5 valori diversi), come mostrato nell’esempio seguente.

$ cat for1-wrong2.shi=1for day in "Mon Tue Wed Thu Fri"do echo "Weekday $((i++)) : $day"done$ ./for1-wrong2.shWeekday 1 : Mon Tue Wed Thu Fri

Variabile per l’elenco dopo “in” parola chiave

Invece di fornire i valori direttamente nel ciclo for, è possibile memorizzare i valori in una variabile, e utilizzare la variabile del per il ciclo dopo la “a” la parola chiave, come mostrato nell’esempio seguente.

Attenzione: come best practice, dovresti sempre citare le variabili bash quando ti riferisci. Ci sono poche eccezioni a questa regola di best practice. Questo è uno di loro., Se si raddoppia la citazione della variabile in questo ciclo for, l’elenco dei valori verrà trattato come valore singolo. Molte persone cadono in questa trappola. Fai attenzione e non raddoppiare la tua variabile nel ciclo for.

Non specificare l’elenco; ottenerlo dai parametri posizionali

Se non si specifica la parola chiave “in” seguita da qualsiasi elenco di valori nel ciclo bash for, utilizzerà i parametri posizionali (cioè gli argomenti che vengono passati allo script della shell).

Attenzione: Si prega di fare attenzione se si utilizza questo metodo. Non dovresti includere la parola chiave ” in ” nel ciclo for., Se si lascia la parola chiave “in” senza valori, non utilizzerà il parametro posizionale come mostrato di seguito. Non andrà all’interno del ciclo. cioè for loop non verrà mai eseguito come mostrato nell’esempio seguente.

$ cat for3-wrong.shi=1for day indo echo "Weekday $((i++)) : $day"done$ ./for3-wrong.sh Mon Tue Wed Thu Fri

Nota: fare riferimento al nostro articolo precedente per saperne di più sui parametri posizionali bash.

Output del comando Unix come valori di elenco dopo la parola chiave “in”

È possibile utilizzare l’output di qualsiasi comando UNIX / Linux come elenco di valori nel ciclo for racchiudendo il comando in back-ticks ` ` come mostrato di seguito.,

Passa in loop file e directory in un ciclo for

Per scorrere file e directory in una directory specifica, basta cd in quella directory e dare * nel ciclo for come mostrato di seguito.

Il seguente esempio scorrerà tutti i file e le directory sotto la tua home directory.

L’uso di * nel ciclo bash for è simile al globbing dei file che usiamo nella riga di comando di Linux quando usiamo il comando ls (e altri comandi).

Ad esempio, quanto segue mostrerà tutti i file e le directory nella directory home., Questo è il concetto che viene utilizzato in quanto sopra for5.sh esempio.

cd ~ls *

Quanto segue mostrerà tutti i *.file conf che inizia con a, b, o, c o d nella directory / etc.

$ ls -1 /etc/*.conf/etc/asound.conf/etc/autofs_ldap_auth.conf/etc/cas.conf/etc/cgconfig.conf/etc/cgrules.conf/etc/dracut.conf

Lo stesso argomento che viene utilizzato nel comando ls sopra, può essere utilizzato in un ciclo bash for, come mostrato nell’esempio seguente.

Esci dal ciclo for

Puoi uscire da un ciclo for usando il comando ‘break’ come mostrato di seguito.,

$ cat for6.shi=1for day in Mon Tue Wed Thu Frido echo "Weekday $((i++)) : $day" if ; then break; fidone$ ./for6.shWeekday 1 : MonWeekday 2 : Tue

Continua dall’alto del ciclo for

In determinate condizioni, puoi ignorare il resto dei comandi nel ciclo for e continuare di nuovo il ciclo dall’alto (per il valore successivo nell’elenco), usando il comando continua come mostrato di seguito.

L’esempio seguente aggiunge “(FINE SETTIMANA)” a Sat e Sun e “(giorno della settimana)” al resto dei giorni.

Bash for loop usando la sintassi del programma C

Questo esempio utilizza il secondo metodo di bash for loop, che è simile alla sintassi C for loop., L’esempio seguente genera 5 numeri casuali utilizzando lo stile bash C per il ciclo.

9. Infinite Bash for loop

Quando non si fornisce l’inizio, la condizione e l’incremento nel ciclo di bash C-style for, diventerà un ciclo infinito. È necessario premere Ctrl-C per interrompere il ciclo.

$ cat for9.shi=1;for (( ; ; ))do sleep $i echo "Number: $((i++))"done

Come abbiamo detto sopra, premi Ctrl-C per uscire da questo esempio di ciclo infinito di bash.,

$ ./for9.shNumber: 1Number: 2Number: 3

Usando la virgola nello stile C di bash per il ciclo

Nel ciclo in stile c di bash, oltre a incrementare il valore utilizzato nella condizione, puoi anche incrementare un altro valore come mostrato di seguito.

Nella sezione inizializza e nella sezione incremento del ciclo for bash C-style, è possibile avere più valori separando con virgola come mostrato di seguito.

Il seguente ciclo for viene eseguito un totale di 5 volte, usando la variabile i. Tuttavia la variabile j inizia con 5 e ottiene un incremento di 5 ogni volta che il ciclo viene eseguito.,

$ cat for10.shfor ((i=1, j=10; i <= 5 ; i++, j=j+5))do echo "Number $i: $j"done$ ./for10.shNumber 1: 10Number 2: 15Number 3: 20Number 4: 25Number 5: 30

Intervallo di numeri dopo la parola chiave “in”

È possibile eseguire il ciclo utilizzando l’intervallo di numeri nel ciclo for “in” utilizzando l’espansione delle parentesi graffe.

Il seguente esempio scorre 10 volte usando i valori da 1 a 10.

$ cat for11.shfor num in {1..10}do echo "Number: $num"done$ ./for11.shNumber: 1Number: 2Number: 3Number: 4Number: 5...

Intervallo di numeri con incrementi dopo la parola chiave “in”

Il seguente esempio scorre 5 volte usando i valori da 1 a 10, con un incremento di 2. cioè Inizia con 1 e continua ad aumentare di 2, fino a raggiungere 10.,

$ cat for12.shfor num in {1..10..2}do echo "Number: $num"done$ ./for12.shNumber: 1Number: 3Number: 5Number: 7Number: 9

PS: Non dimenticate di bookmark questo articolo per il vostro riferimento futuro.

> Aggiungi il tuo commento

Se ti è piaciuto questo articolo, si potrebbe anche come..

  1. 50 Tutorial Sysadmin Linux
  2. 50 Comandi Linux più usati di frequente (con esempi)
  3. I 25 migliori strumenti di monitoraggio e debug delle prestazioni Linux
  4. Mamma, l’ho trovato!,l>
  • Awk Introduction – 7 Awk Print Examples
  • Advanced Sed Substitution Examples
  • 8 Essential Vim Editor Navigation Fundamentals
  • 25 Most Frequently Used Linux IPTables Rules Examples
  • Turbocharge PuTTY with 12 Powerful Add-Ons


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *