GNU/Linux >> Linux Esercitazione >  >> Linux

Script Bash per Loop spiegato con esempi

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 di i 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.


Linux
  1. Come scrivere uno script Bash con esempi

  2. Bash For Loop Guida ed esempi

  3. Spiegazione del comando di Linux unexpand per principianti (con esempi)

  4. Esempi di Bash For Loop e While Loop

  5. Esempi di Bash for loop

Bash Scripting:funzioni spiegate con esempi

Bash Scripting:variabili spiegate con esempi

Scripting Bash – Spiegazione del comando Printf con esempi

Bash Scripting – Array associativo spiegato con esempi

Bash For Loops con esempi

Il ciclo Bash FOR spiegato e semplificato