Programmazione BASH

Ciclo annidato negli esempi di script Bash

Ciclo annidato negli esempi di script Bash

Nella programmazione o nello scripting, il ciclo è uno dei concetti più basilari e potenti. Un ciclo esegue determinate attività finché non vengono soddisfatte le condizioni specificate. Ogni linguaggio di programmazione o di scripting ha modi diversi di implementare il concetto.

In questa guida, controlla il ciclo annidato nello script bash.

Ciclo annidato

Un ciclo, per definizione, esegue determinati compiti fino a quando le condizioni non sono soddisfatte. Cosa succede se l'attività include l'esecuzione di un ciclo?? Questo è il concetto di un ciclo annidato. Un ciclo dentro un ciclo.

Questa è la struttura di base di un ciclo.

mentre (condizione)
# qualcosa

Qui, il ciclo while continuerà a eseguire le attività dichiarate all'interno del blocco finché la condizione è soddisfatta. Nel caso di un ciclo while annidato, la struttura sarebbe simile a questa.

# ciclo principale
mentre (condizione)
# loop annidato
mentre(condizione)
# qualcosa

In teoria, i loop annidati possono raggiungere una profondità infinita. In molte situazioni, i loop annidati possono essere la soluzione perfetta.

Ciclo nello script bash

Bash è un potente linguaggio di scripting. Ci sono diverse strutture di loop nella bash. I più popolari sono i cicli for, while e fino. Se hai già familiarità con la programmazione C/C++, la sintassi sarà sicuramente molto simile.

Per i loop

For loop è uno degli output di moduli più comuni e versatili, ecc. La struttura dei loop negli script bash. La struttura ricorda molto anche il ciclo for in C/C++.

La struttura del ciclo for in bash è la seguente.

for ((inizializza ; condizione ; incrementa)); fare
# qualcosa
fatto

La struttura è molto autoesplicativa. La sezione di inizializzazione non è obbligatoria. Tuttavia, la condizione e l'incremento hanno una priorità più alta.

Mettiamolo in azione. Ecco uno script bash molto semplicistico che implementa il ciclo for.

per ((i = 0 ; i < 5 ; i++)); do
eco "ciao mondo"
fatto

È anche possibile utilizzare list/range come condizione del ciclo. È particolarmente utile se si lavora con un elenco di file, intervalli di numeri, array, output di comandi, ecc. La struttura assomiglia a questa.

per articolo in ; fare
# qualcosa
fatto

Ad esempio, il seguente script stamperà "ciao mondo" cinque volte.

per i in 1... 5; fare
eco "ciao mondo"
fatto

E se avessimo bisogno di lavorare con il contenuto di una directory?? Nell'esempio seguente, lo script stamperà tutti i file nella directory /usr/bin.

for i in /usr/bin/*; fare
echo $i
fatto

Ora, cosa facciamo per avere un ciclo for annidato?? È solo uno per loop dentro un altro. Ecco un ciclo for annidato usando l'esempio precedente.

per ((i = 0 ; i < 3 ; i++)); do
for((j = 0 ; j < 2 ; j++)); do
eco "ciao mondo"
fatto
fatto

L'output sarà "ciao mondo" 6 volte. Il ciclo esterno verrà eseguito tre volte, eseguendo il ciclo interno due volte.

Mentre i loop

Il ciclo while è un altro ciclo popolare e intuitivo disponibile negli script bash. La sintassi è simile a questa.

mentre ; fare
# qualcosa
fatto

Nell'esempio seguente, lo script stamperà "ciao mondo" cinque volte.

numero=1
while [ $num -le 5 ]; fare
eco "ciao mondo"
numero=$(($num+1))
fatto

Come sarebbe avere un ciclo while annidato?? Ecco un semplice esempio.

num_a=1
num_b=1
while [ $num_a -le 5 ]; fare
while [ $num_b -le 5 ]; fare
eco "ciao mondo"
num_b=$(($num_b+1))
fatto
num_a=$(($num_a+1))
fatto

Fino ai loop

Se hai un background di programmazione in C/C++, allora hai familiarità con il ciclo do-while. Sfortunatamente, bash non ha niente del genere. Tuttavia, finché il ciclo non funziona in modo simile. Anche la sintassi sembra abbastanza la stessa.

fino a [ ]; fare
# qualcosa
fatto

La differenza tra il while e il finché il ciclo è la condizione di test. Finché la condizione di test è vera, un ciclo while continuerà a funzionare. Un ciclofino, tuttavia, continuerà a funzionare solo se la condizione è falsa.

Ecco un rapido esempio del ciclo while. Stamperà la tavola pitagorica di 2.

num_a=1
fino a [ $num_a -gt 10 ]; fare
echo $(($num_a * 2))
num_a=$(($num_a+1))
fatto

Interruzione del ciclo

In determinate situazioni, se vengono soddisfatte determinate condizioni, l'esecuzione del resto del ciclo diventa ridondante. Le interruzioni del ciclo sono una caratteristica interessante che consente di interrompere il ciclo in una determinata condizione. È più importante per i loop annidati poiché più alti sono i loop, maggiore è il consumo di risorse e l'inefficienza.

Qui, il seguente ciclo for smetterà di essere eseguito non appena raggiunge la condizione.

per ((i=1;i<=100;i++)); do
echo $i
if [ $i -eq 10 ]; poi
rompere
fi
fatto

Scopri come interrompere il ciclo while per una spiegazione approfondita e una dimostrazione delle interruzioni del ciclo.

Pensieri finali

Un ciclo annidato è un concetto semplice e potente da comprendere e implementare. Si spera che questa guida sia stata in grado di descrivere e dimostrare il concetto.

Interessato ad altre guide di scripting bash? Dai un'occhiata alle seguenti guide.

  • Bash loop infinito
  • Input utente dallo script Bash
  • Funzione Bash che restituisce array

Buon calcolo!

Le migliori app di mappatura del gamepad per Linux
Se ti piace giocare su Linux con un gamepad invece di un tipico sistema di input di tastiera e mouse, ci sono alcune app utili per te. Molti giochi pe...
Strumenti utili per i giocatori Linux
Se ti piace giocare su Linux, è probabile che tu abbia utilizzato app e utilità come Wine, Lutris e OBS Studio per migliorare l'esperienza di gioco. O...
Giochi rimasterizzati in HD per Linux che non hanno mai avuto una versione Linux prima
Molti sviluppatori ed editori di giochi stanno realizzando remaster HD di vecchi giochi per prolungare la vita del franchise, per favore i fan richied...