GNU/Linux >> Linux Esercitazione >  >> Linux

Script di shell Parte 4:Strutture di controllo della ripetizione

Benvenuto nella quarta parte della serie di tutorial sugli script di shell di HowtoForge (fai clic qui per leggere la parte 1, la parte 2 e la parte 3 del tutorial). In questa parte, tratteremo le diverse strutture di controllo della ripetizione della shell bash e come utilizzare ciascuna struttura fornendo alcuni esempi. Iniziamo.

Introduzione

La struttura di controllo della ripetizione, nota anche come struttura di controllo del ciclo, è un tipo di struttura di controllo nei linguaggi di programmazione che viene utilizzata per semplificare attività ripetitive o ricorsive. Le istruzioni di ciclo ottimizzano qualsiasi codice fornendo un modo per ridurre al minimo il codice, semplificando la risoluzione dei problemi rispetto al codice non strutturato che fornisce lo stesso output. Ci sono tre tipi di istruzioni di loop che la shell bash supporta:i loop for, while e till.

Cicli For

Il ciclo for è un'istruzione di ciclo che utilizza la parola chiave for per dichiarare un'istruzione ripetitiva. bash supporta diverse sintassi per l'istruzione ciclo for:

Sintassi 1:struttura For-in

for <varName> in <list>
do
    #### your statement here
done

Questa sintassi inizia con la parola chiave for, quindi segue il nome di una variabile, la parola chiave in e l'elenco dei possibili valori per la variabile. Ogni valore nell'elenco sarà separato da uno spazio e l'inizio delle righe di codice che verranno ripetute è definito in do e termina con una parola chiave done.

Creiamo una semplice istruzione for loop che consentirà all'utente di inserire 5 valori e ottenere la somma dei numeri:

#!/bin/bash 
result=0;
input=0;
for var in 1 2 3 4 5
do
     printf "Input integer %d : " $var
     read input
     result=$((result+input))
done
echo "the result is " $result

In questo esempio, la variabile var funge da contatore del nostro ciclo. Il suo valore è definito nell'elenco di numeri dopo la parola chiave in e la shell cambia i valori della variabile var dopo ogni esecuzione del ciclo nell'istruzione di ciclo. Poiché nella nostra lista sono presenti solo cinque valori interi, la shell eseguirà i codici all'interno della nostra istruzione di ciclo solo per cinque volte.

Sintassi 2:istruzione per il ciclo con valori di elenco di stringhe

Puoi anche dichiarare una variabile che sarà valida per l'elenco degli articoli per il tuo contatore. Ad esempio, considera il seguente codice:

#!/bin/bash
list="var1 var2 var3 var4"
var=""
mkdir sample
cd sample
echo creating the "directories...."
for var in $list
do
     mkdir $var
done

La riga list="var1 var2 var3 var4" definisce i valori della variabile list. È stato quindi assegnato a var nella riga per var in $list e, infine, le directory vengono quindi create nella riga mkdir $var.

Sintassi 3:istruzione For loop con list as a file

Puoi anche recuperare un elenco da un file esistente da utilizzare nell'istruzione per il ciclo invece di dichiararlo all'interno del tuo codice usando il comando cat. Ad esempio, apri il tuo editor di testo preferito, quindi elenca almeno cinque nomi di directory.

Quindi apri una nuova scheda nello stesso editor di testo e crea un nuovo script. Questo script dovrebbe essere salvato nella stessa directory in cui è stato salvato l'elenco delle directory che hai creato in precedenza.

#!/bin/bash 
dirList=$(cat list)
echo "creating directories...."
for var in $dirList
do
mkdir $var
done

Questo esempio diventa utile quando devi creare centinaia di directory nel tuo computer Linux, non credi?

Sintassi 4:sintassi simile a C

for((initialization; boolean_test; increment/decrement))
do
#### your code goes here
done

Forse, la struttura più familiare del ciclo for che supporta la shell è la struttura simile a C. Il ciclo inizia con l'inizializzazione della variabile counter e poi la shell valuta l'espressione booleana dichiarata dopo l'inizializzazione. Se il risultato dell'espressione booleana è vero, la shell eseguirà l'insieme di istruzioni all'interno della clausola do, altrimenti termina l'istruzione di ciclo e procede alla riga dopo la parola chiave done. La shell procederà all'iterazione successiva attraverso l'istruzione di incremento o decremento dichiarata dopo il test booleano. A titolo di esempio, ricostruiamo il nostro primo esempio utilizzando questa struttura.

#!/bin/bash 
result=0
input=0
for((var=1;var<=5;var++))
do
printf "Input integer %d : " $var
read input
result=$((result+input))
done
echo $result

Dichiarazione durante il ciclo

L'istruzione while è un tipo di struttura ripetitiva in bash che utilizza la parola chiave while. A differenza della sintassi di tipo C della struttura di ciclo for, la struttura di controllo ripetitiva while separa l'inizializzazione, il test booleano e l'istruzione di incremento/decremento.

Sintassi 1:While Structure con istruzioni condizionali basate su simboli aritmetici

<initialization>
while(condition)
do
    ###your code goes here
<increment/decrement>
done

Per essere in grado di differenziare while dalle altre istruzioni in loop, costruiamo il nostro primo esempio per l'istruzione while.

#!/bin/bash
result=0
input=0
var=1
while((var <= 5))
do
printf "Input integer %d : " $var
read input
result=$((result+input))
var=$((var+1))
done
echo "the result is " $result

Guardando il nostro esempio, l'istruzione while inizia con un'inizializzazione della nostra variabile contatore var. Successivamente, il test booleano viene dichiarato dopo la parola chiave while e l'insieme di istruzioni da ripetere verrà dichiarato all'interno delle istruzioni do e done. Nelle istruzioni while, l'interprete avvierà ed eseguirà la ripetizione dei codici solo se il risultato del test booleano è vero. D'altra parte, l'istruzione di looping will termina l'iterazione dei codici solo quando l'espressione booleana risulta falsa.

Sintassi 2:dichiarazione While Looping con istruzione condizionale basata su mnemonico

<initialization>
while [ <condition> ]
do
####your code goes here
<increment/decrement>
done

Puoi anche dichiarare un'istruzione condizionale basata su mnemonico all'interno di un'istruzione del ciclo while. Per la dichiarazione verrà utilizzata una parentesi quadra al posto delle parentesi. (Esamina le istruzioni condizionali basate sul mnemonico qui ) Ad esempio:

#!/bin/bash 
var=1;
while [ $var -le 5 ]
do
printf "Input integer %d : " $var
read input
result=$((result+input))
var=$((var+1))
done
echo "the result is " $result

Sintassi 3:istruzione While Looping con istruzione condizionale basata su file

while read <variable_name>
do
####your code goes here
done <<path to the text file>

Proprio come abbiamo fatto nell'istruzione di ciclo for, puoi anche aprire un file di testo e associarlo nell'istruzione di ciclo while. Ad esempio:

#!/bin/bash 
mkdir sample2
cd sample2
echo "creating directories..."
while read var
do
    mkdir $var
done<list

In questo esempio, ho riciclato l'elenco che abbiamo creato qualche tempo fa e ho creato un nuovo script nella stessa directory. Nota che se il tuo file di testo si trova in una directory diversa, devi fornire il percorso esatto del file dopo il simbolo <.

Fino alla dichiarazione di ciclo

Un altro tipo di istruzione di loop supportata da bash è la struttura till. L'istruzione until esegue tutti i comandi all'interno del ciclo finché l'espressione booleana non risulta falsa. È l'esatto opposto dell'istruzione while.

Sintassi 1:ciclo Until con istruzione condizionale basata su simboli aritmetici

until ((<conditional_statement>))
do
####set of commands
done

Facciamo un esempio:

result=0 
input=0
var=1
until((var > 5))
do
printf "Input integer %d : " $var
read input
result=$((result+input))
var=$((var+1))
done
echo "the result is " $result

Sintassi 2:istruzione Until Looping con istruzione condizionale basata sul mnemonico

<initialization>
until [ <condition> ]
do
     ####your code goes here
<increment/decrement>
done

Poiché l'istruzione until è esattamente l'opposto dell'istruzione di ciclo while, puoi anche dichiarare un'istruzione condizionale basata su mnemonico nella struttura fino. Tuttavia, per terminare devi dichiarare un'istruzione condizionale opposta, ovvero fare in modo che l'istruzione condizionale valuti falsa.

!/bin/bash 
result=0
input=0
var=1
until [ $var -gt 5 ]
do
printf "Input integer %d : " $var
read input
result=$((result+input))
var=$((var+1))
done
echo "the result is " $result

Conclusione

Questa parte del tutorial copre le tre strutture di loop supportate da bash:l'istruzione di loop for, while e till. Ognuna di queste affermazioni ha struttura, utilizzo e vantaggi diversi. Bash supporta diverse strutture, fornendo più scelte ai programmatori e, quindi, semplificando la codificazione degli script di shell.


Linux
  1. Elencare tutti i comandi che una shell conosce?

  2. Come analizzare Json con lo script della shell in Linux?

  3. La dichiarazione blocca il meccanismo nello scripting della shell?

  4. Dovrei usare Apt o Apt-get negli script della shell?

  5. Simbolo di apice inverso (`) negli script della shell di Linux

Script della shell Parte 3:Strutture di controllo delle decisioni negli script della shell

Shell Scripting Parte I:Introduzione agli script bash

Scripting della shell Parte 2:accettazione degli input ed esecuzione dell'aritmetica della shell

Bash Scripting – Case Statement

Che cos'è Shebang negli script della shell di Linux?

Tutorial passo passo sullo scripting della shell