Introduzione
Il for
loop è una funzionalità di programmazione essenziale che passa attraverso un elenco di elementi. Per ciascuno di questi elementi, il for
loop esegue una serie di comandi. Il comando aiuta a ripetere i processi fino a una condizione di terminazione.
Che tu stia esaminando una serie di numeri o rinominando file, for
i loop negli script Bash forniscono un modo conveniente per elencare automaticamente gli elementi.
Questo tutorial mostra come utilizzare Bash for
loop negli script.
Prerequisiti
- Accesso al terminale/riga di comando (CTRL +ALT +T ).
- Un editor di testo, come Nano o Vi/Vim.
- Terminologia di programmazione elementare.
Script Bash per Loop
Usa il for
ciclo per scorrere un elenco di elementi per eseguire i comandi indicati.
La sintassi di base per for
il ciclo negli script Bash è:
for <element> in <list>
do
<commands>
done
L'elemento, l'elenco e i comandi analizzati nel ciclo variano a seconda del caso d'uso.
Esempi di Bash For Loop
Di seguito sono riportati vari esempi di for
loop negli script Bash. Crea uno script, aggiungi il codice ed esegui gli script Bash dal terminale per vedere i risultati.
Singoli oggetti
Scorri una serie di elementi dati e stampa ciascuno con la seguente sintassi:
#!/bin/bash
# For loop with individual numbers
for i in 0 1 2 3 4 5
do
echo "Element $i"
done
Esegui lo script per vedere l'output:
. <script name>
Lo script stampa ogni elemento dall'elenco fornito sulla console.
In alternativa, usa le stringhe in un elenco separato da spazi:
#!/bin/bash
# For loop with individual strings
for i in "zero" "one" "two" "three" "four" "five"
do
echo "Element $i"
done
Salva lo script ed esegui dal terminale per vedere il risultato.
L'output stampa ogni elemento sulla console ed esce dal ciclo.
Intervallo
Invece di scrivere un elenco di singoli elementi, usa la sintassi dell'intervallo e indica il primo e l'ultimo elemento:
#!/bin/bash
# For loop with number range
for i in {0..5}
do
echo "Element $i"
done
Lo script restituisce tutti gli elementi dall'intervallo fornito.
La sintassi dell'intervallo funziona anche per le lettere. Ad esempio:
#!/bin/bash
# For loop with letter range
for i in {a..f}
do
echo "Element $i"
done
Lo script invia le lettere alla console in ordine crescente nell'intervallo fornito.
La sintassi dell'intervallo funziona per gli elementi in ordine decrescente se l'elemento iniziale è maggiore di quello finale.
Ad esempio:
#!/bin/bash
# For loop with reverse number range
for i in {5..0}
do
echo "Element $i"
done
L'output elenca i numeri in ordine inverso.
La sintassi dell'intervallo funziona se gli elementi aumentano o diminuiscono.
Intervallo con incremento
Utilizzare la sintassi dell'intervallo e aggiungere il valore del passaggio per scorrere l'intervallo a intervalli.
Ad esempio, utilizza il seguente codice per elencare i numeri pari:
#!/bin/bash
# For loop with range increment numbers
for i in {0..10..2}
do
echo "Element $i"
done
L'output stampa ogni altra cifra dall'intervallo specificato.
In alternativa, passa da dieci a zero contando alla rovescia con numeri pari:
#!/bin/bash
# For loop with reverse range increment numbers
for i in {10..0..2}
do
echo "Element $i"
done
Esegui lo script per stampare ogni altro elemento dell'intervallo in ordine decrescente.
Incremento di scambio 2
per qualsiasi numero inferiore alla distanza tra l'intervallo per ottenere valori per intervalli diversi.
Il comando seq
Il seq
comando genera una sequenza di numeri. Analizza la sequenza nello script Bash for
loop come comando per generare un elenco.
Ad esempio:
#!/bin/bash
# For loop with seq command
for i in $(seq 0 2 10)
do
echo "Element $i"
done
L'output stampa ogni elemento generato dal seq
comando.
Il seq
command è un comando storico e non un modo consigliato per generare una sequenza. I metodi integrati tra parentesi graffe sono preferibili e più veloci.
Stile C
Gli script Bash consentono tre parametri in stile C for
espressioni di controllo del ciclo. Aggiungi l'espressione tra parentesi doppie come segue:
#!/bin/bash
# For loop C-style
for (( i=0; i<=5; i++ ))
do
echo "Element $i"
done
L'espressione è composta da:
- L'inizializzatore (
i=0
) determina il numero in cui il ciclo inizia a contare. - Condizione di arresto (
i<=5
) indica quando il ciclo esce. - Passaggio (
i++
) incrementa il valore dii
fino alla condizione di arresto.
Separa ogni condizione con un punto e virgola (;
). Regola i tre valori secondo necessità per il tuo caso d'uso.
Il terminale emette ogni elemento, a partire dal valore dell'inizializzatore.
Il valore aumenta di un passo, fino alla condizione di arresto.
Cicli infiniti
for
infinito i loop non hanno una condizione impostata per terminare il loop. Il programma viene eseguito all'infinito perché la condizione finale non esiste o non si soddisfa mai.
Per generare un for
infinito loop, aggiungi il codice seguente a uno script Bash:
#!/bin/bash
# Infinite for loop
for (( ; ; ))
do
echo "CTRL+C to exit"
done
Per terminare l'esecuzione dello script, premi CTRL +C .
I cicli infiniti sono utili quando un programma viene eseguito fino al raggiungimento di una condizione particolare.
Pausa
L'istruzione break termina il ciclo corrente e aiuta a uscire dal for
loop in anticipo. Questo comportamento consente di uscire dal ciclo prima di soddisfare una condizione stabilita.
Per dimostrare, aggiungi il codice seguente a uno script Bash:
#!/bin/bash
# Infinite for loop with break
i=0
for (( ; ; ))
do
echo "Iteration: ${i}"
(( i++ ))
if [[ i -gt 10 ]]
then
break;
fi
done
echo "Done!"
L'esempio mostra come uscire da un for
infinito loop utilizzando un break
. L'istruzione Bash if aiuta a controllare il valore di ogni intero e fornisce il break
condizione. Questo termina lo script quando un numero intero raggiunge il valore dieci.
Per uscire da un ciclo nidificato e da un ciclo esterno, utilizza break 2
.
Continua
Il continue
comando termina l'iterazione del ciclo corrente. Il programma continua il ciclo, iniziando con l'iterazione seguente. Per illustrare, aggiungi il codice seguente a uno script Bash per vedere come il continue
l'istruzione funziona in un for
ciclo:
#!/bin/bash
# For loop with continue statement
for i in {1..100}
do
if [[ $i%11 -ne 0 ]]
then
continue
fi
echo $i
done
Il codice controlla i numeri compresi tra uno e cento e stampa solo i numeri divisibili per undici.
Il condizionale if
la dichiarazione verifica la divisibilità, mentre il continue
l'istruzione salta tutti i numeri che hanno resto quando sono divisi per undici.
Array
Gli array memorizzano un elenco di elementi. Il for
loop fornisce un metodo per scorrere gli array per elemento.
Ad esempio, definire un array e scorrere gli elementi con:
#!/bin/bash
# For loop with array
array=(1 2 3 4 5)
for i in ${array[@]}
do
echo "Element $i"
done
L'output stampa ogni elemento memorizzato nell'array dal primo all'ultimo.
Il for
di Bash loop è l'unico metodo per scorrere i singoli elementi dell'array.
Indici
Quando si lavora con gli array, ogni elemento ha un indice.
Elenca gli indici di un array con il codice seguente:
#!/bin/bash
# For loop with array indices
array=(1 2 3 4 5)
for i in ${!array[@]}
do
echo "Array indices $i"
done
L'indicizzazione degli elementi inizia da zero. Pertanto, il primo elemento ha un indice zero.
L'output stampa numeri da zero a quattro per una matrice con cinque elementi.
Loop nidificati
Per scorrere o generare array multidimensionali, utilizza for
nidificato loop.
Ad esempio, genera valori decimali da zero a tre utilizzando i cicli nidificati:
#!/bin/bash
# Nested for loop
for (( i = 0; i <= 2; i++ ))
do
for (( j = 0 ; j <= 9; j++ ))
do
echo -n " $i.$j "
done
echo ""
done
Il codice esegue le seguenti operazioni:
- Riga 1 avvia il
for
ciclo a zero, aumenta di uno e termina a due, inclusi. - Riga 3 avvia il
for
annidato ciclo a zero. Il valore aumenta di uno e termina a nove inclusi. - Riga 5 stampa i valori da
for
loop. Il for annidato scorre tutti i numeri tre volte, una per ogni valore del ciclo esterno.
L'output stampa ogni combinazione di numeri sulla console e inserisce una nuova riga quando l'outer il ciclo termina un'iterazione.
Stringhe
Per scorrere le parole in una stringa, archiviare la stringa in una variabile. Quindi, analizza la variabile in un for
ciclo come un elenco.
Ad esempio:
#!/bin/bash
# For loop with string
strings="I am a string"
for i in ${strings}
do
echo "String $i"
done
Il ciclo scorre la stringa, con ogni parola che è un elemento separato.
L'output stampa le singole parole dalla stringa alla console.
File
Il for
il ciclo combinato con le ricerche di prossimità aiuta a elencare o modificare i file che soddisfano una condizione specifica.
Ad esempio, elenca tutti gli script Bash nella directory corrente con un for
ciclo:
#!/bin/bash
# For loop with files
for f in *.sh
do
echo $f
done
Lo script ricerca nella directory corrente ed elenca tutti i file con .sh estensione.
Scorri i file o le directory per rinominare o modificare automaticamente le autorizzazioni per più elementi contemporaneamente.
Sostituzione dei comandi
Il for
loop accetta la sostituzione del comando come un elenco di elementi da scorrere.
Il prossimo esempio mostra come scrivere un for
ciclo con sostituzione del comando:
#!/bin/bash
# For loop with command substitution
list=`cat list.txt`
# Alternatively, use list=$(cat list.txt)
for i in $list
do
echo $i
done
Il commento Bash offre una sintassi alternativa per la sostituzione dei comandi. Il codice legge il contenuto di list.txt file utilizzando il cat
comando e salva le informazioni in una variabile list
.
Usa il metodo di sostituzione dei comandi per rinominare i file da un elenco di nomi salvati in un file di testo.
Nota: Scopri come usare il comando cat e for loop per leggere i file riga per riga in Bash.
Argomenti della riga di comando
Usa il for
ciclo per scorrere gli argomenti della riga di comando.
Il codice di esempio seguente mostra come leggere gli argomenti della riga di comando in un for
ciclo:
#!/bin/bash
# For loop expecting command line arguments
for i in [email protected]
do
echo "$i"
done
Fornisci gli argomenti della riga di comando quando esegui lo script Bash.
Ad esempio:
. <script name> foo bar
Il [email protected]
sostituisce ogni argomento della riga di comando nel for
ciclo.
Conclusione
Dopo aver seguito questo tutorial, sai come utilizzare il for
loop negli script Bash per scorrere gli elenchi.
Quindi, impara come scrivere e utilizzare le funzioni Bash.