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 diifino 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
forciclo a zero, aumenta di uno e termina a due, inclusi. - Riga 3 avvia il
forannidato ciclo a zero. Il valore aumenta di uno e termina a nove inclusi. - Riga 5 stampa i valori da
forloop. 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.