Bash Scripting – Ciclo While

Bash Scripting – Ciclo While

UN ciclo while è un'istruzione che ripete un blocco di codice finché la condizione specificata non viene valutata come falsa. Possiamo utilizzare questa istruzione o ciclo nel nostro programma quando non sappiamo quante volte la condizione verrà valutata vera prima di valutare falsa.

Tabella dei contenuti

La sintassi di un ciclo while nello scripting BASH

while [ condition ]; do  # statements  # commands done 

Se la condizione è vera, i comandi all'interno del blocco while vengono eseguiti e ripetuti nuovamente dopo aver verificato la condizione. Inoltre, se la condizione è falsa, le istruzioni all'interno del blocco while vengono saltate e le istruzioni dopo il blocco while vengono eseguite.



Esempio di loop utilizzando l'istruzione while in Linux

Per prima cosa creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso utilizziamo l'editor di testo `vim`.

vim while.sh 

#!/usr/bin/bash

a=7
mentre [ $a -gt 4 ];
Fare
eco $a
((UN-))
Fatto
eco Fuori dal giro

Spiegazione:

  • #!/usr/bin/bash> : Questa riga è chiamata shebang e indica il percorso dell'interprete che dovrebbe essere utilizzato per eseguire lo script. In questo caso, specifica che deve essere utilizzata la shell Bash.
  • a=7> : Inizializza una variabile denominata a> con il valore 7.
  • while [ $a -gt 4 ];> : avvia un ciclo while che continua finché il valore di a> è maggiore di 4.
  • do> : Contrassegna l'inizio del blocco di codice da eseguire all'interno del ciclo while.
  • echo $a> : Stampa il valore corrente della variabile a> alla consolle.
  • ((a--))> : Diminuisce il valore di a> per 1. Questo è un modo di scrivere abbreviato a=$((a - 1))> .
  • done> : Contrassegna la fine del blocco di codice per il ciclo while.
  • echo 'Out of the loop'> : Stampa Out of the loop sulla console dopo il completamento del ciclo while.
Mentre Ciclo in Linux

Mentre Ciclo in Linux

In sintesi, questo script inizializza una variabile ` a`> con il valore 7, quindi entra in un ciclo while che continua finché ` a`> è maggiore di 4. All'interno del ciclo, stampa il valore corrente di ` a`> e lo decrementa di 1 in ogni iterazione. Una volta` a`> diventa 4 o meno, il ciclo termina e lo script stampa Out of the loop sulla console.

Lettura di un file con un ciclo while

Possiamo leggere un file con un ciclo while in BASH. Analizzando determinati parametri nella condizione del ciclo while, possiamo scorrere il file riga per riga o per altri gruppi come caratteri o parole.

Per prima cosa creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso utilizziamo l'editor di testo `vim`.

vim while.sh 

#!/usr/bin/bash

file=temp.txt
while leggi -r riga;
Fare
echo $riga
fatto <$file

Spiegazione:

  • #!/usr/bin/bash> : Questa riga shebang specifica che la shell Bash deve essere utilizzata per interpretare lo script.
  • file=temp.txt> : Assegna la stringa temp.txt alla variabile file> , che rappresenta il nome del file da leggere.
  • while read -r line;> : avvia un ciclo while che legge ogni riga dal file specificato.
  • do> : Contrassegna l'inizio del blocco di codice da eseguire all'interno del ciclo while.
  • echo $line> : Stampa il contenuto della variabile line> , che rappresenta la riga corrente letta dal file alla console.
  • done> : Contrassegna la fine del blocco di codice per il ciclo while.
  • <'$file'> : Reindirizza l'input del ciclo while in modo che provenga dal file specificato, in questo caso temp.txt.

In sintesi, questo script legge ogni riga dal file temp.txt e la stampa sulla console finché non rimangono più righe nel file. IL -r> opzione con il read> Il comando viene utilizzato per garantire che le barre rovesciate nell'input vengano trattate come caratteri letterali.

leggere il file utilizzando l

leggere il file utilizzando l'istruzione while in Linux

Usiamo il comando read per recuperare effettivamente le righe o i caratteri dal file. Il comando di lettura viene passato con l'argomento -r che ignora l'escape dei caratteri se appare e quindi viene analizzato come suo. Leggiamo una riga da un file menzionato dopo l'istruzione done. Il comando read legge una riga dal file menzionato e i cicli while terminano quando viene letta l'ultima riga del file (non rimane alcuna riga da leggere).

In questo modo possiamo leggere il contenuto del file utilizzando un ciclo while in BASH.

Ciclo while infinito

Per creare un ciclo infinito utilizzando un'istruzione while loop. Non è necessario inserire alcuna condizione nel ciclo while e quindi il ciclo itera all'infinito. Di seguito è riportato l'esempio di un ciclo while infinito:

Per prima cosa creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso utilizziamo l'editor di testo `vim`.

vim while.sh 

#!/usr/bin/bash
Mentre :
Fare
echo Un ciclo infinito
# Possiamo premere Ctrl + C per uscire dallo script
Fatto

Spiegazione:

  • #!/usr/bin/bash> : La riga shebang specifica che la shell Bash deve essere utilizzata per interpretare lo script.
  • while :> : avvia un ciclo infinito. IL :> (due punti) è un comando integrato nella shell che restituisce sempre true, creando di fatto un ciclo infinito.
  • do> : Contrassegna l'inizio del blocco di codice da eseguire all'interno del ciclo infinito.
  • echo 'An Infinite loop'> : stampa la stringa An Infinite loop sulla console in ogni iterazione del loop.
  • # We can press Ctrl + C to exit the script> : Questo è un commento che indica che puoi interrompere lo script premendo Ctrl + C nel terminale. Ctrl + C è un modo comune per interrompere e terminare gli script in esecuzione nel terminale.
  • done> : Contrassegna la fine del blocco di codice per il ciclo infinito.

In sintesi, questo script crea un loop infinito che trasmette continuamente il messaggio An Infinite loop alla console. Il ciclo può essere interrotto e lo script può uscire premendo Ctrl + C nel terminale.

Ciclo infinito utilizzando l

Ciclo infinito utilizzando l'istruzione While in Linux

Pertanto il ciclo while nello script verrà ripetuto per un tempo infinito. Possiamo interrompere manualmente il loop o lo script premendo CTRL + C.

Ciclo while per eseguire l'iterazione per un numero fisso di volte

Possiamo usare un ciclo while per ripetere un numero fisso di volte, possiamo impostare la condizione su -le o minore di uguale a un numero e il ciclo ripeterà finché l'iteratore non sarà minore o uguale al numero fornito in la condizione. Inoltre, dobbiamo incrementare manualmente l'iteratore in modo da mantenere il ticchettio dell'iteratore del ciclo, altrimenti il ​​ciclo andrà avanti all'infinito.

Per prima cosa creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso utilizziamo l'editor di testo `vim`.

vim while.sh 

#!/usr/bin/bash

io=1

# il numero 4 può essere il limite

# itera il ciclo

mentre [ $i -le 4 ];
Fare
eco $i
((i++))
Fatto

Spiegazione:

  • #!/usr/bin/bash> : La riga shebang specifica che la shell Bash deve essere utilizzata per interpretare lo script.
  • i=1> : Inizializza una variabile denominata i> con il valore 1.
  • while [ $i -le 4 ];> : avvia un ciclo while che continua finché il valore di i> è inferiore o uguale a 4.
  • do> : Contrassegna l'inizio del blocco di codice da eseguire all'interno del ciclo while.
  • echo $i> : Stampa il valore corrente della variabile i> alla consolle.
  • ((i++))> : Incrementa il valore di i> per 1. Questo è un modo di scrivere abbreviato i=$((i + 1))> .
  • done> : Contrassegna la fine del blocco di codice per il ciclo while.
ciclo while in Linux

ciclo while in Linux

Nell'esempio sopra, possiamo vedere che il ciclo ripete un numero definito di volte. Poiché abbiamo inizializzato il contatore su 1 e la condizione è ripetere il ciclo finché l'iteratore non è inferiore o uguale al numero in questo caso 4. Pertanto, possiamo modificare il numero nella condizione secondo i nostri requisiti.

Leggi l'argomento della riga di comando con le opzioni getopts

Possiamo utilizzare le opzioni get ops per leggere l'input dalla riga di comando e, se sono presenti più argomenti, possiamo controllarli e analizzarli uno per uno utilizzando un ciclo while. getopts è uno strumento per ottenere l'input dell'utente dalla riga di comando. Possiamo avere più opzioni da analizzare dalla riga di comando e, utilizzando getopts e cicli while, possiamo creare un programma di input dell'utente dall'aspetto professionale.

Per prima cosa creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso utilizziamo l'editor di testo `vim`.

vim while.sh 

#!/bin/bash

while getopts n:a: OPT
Fare
caso ${OPT} in
n) nome=${OPTARG} ;;
a) età=${OPTARG} ;;
*) echo Opzione non valida
esci 1;;
esac
Fatto
printf Mi chiamo $nome e ho $età anni

Spiegazione:

  • #!/bin/bash> : La riga shebang specifica che la shell Bash deve essere utilizzata per interpretare lo script.
  • while getopts n:a: OPT> : avvia un ciclo che utilizza getopts> per analizzare le opzioni della riga di comando. Le opzioni specificate sono n> E a> , entrambi dovrebbero essere seguiti da una discussione.
  • do> : Contrassegna l'inizio del blocco di codice da eseguire all'interno del loop.
  • case '${OPT}' in> : avvia un'istruzione case che valuta il valore dell'opzione incontrata da getopts> .
  • n) name=${OPTARG};;> : Se l'opzione è -n> , assegna alla variabile il valore dell'argomento corrispondente name> .
  • a) age=${OPTARG};;> : Se l'opzione è -a> , assegna alla variabile il valore dell'argomento corrispondente age> .
  • *) echo 'Invalid option'> : Se viene rilevata un'opzione non valida, stampa un messaggio di errore sulla console.
  • exit 1;;> : esce dallo script con un codice di stato diverso da zero, indicando un errore.
  • esac> : termina la dichiarazione del caso.
  • done> : Contrassegna la fine del blocco di codice per il loop.
  • printf 'My name is $name and am $age years old '> : stampa un messaggio formattato sulla console utilizzando i valori di ` name`> e ` age`> ottenuto dalle opzioni della riga di comando.
Ciclo while in Linux

Ciclo while in Linux

In questo caso, abbiamo due opzioni, vale a dire il nome e l'età, puoi avere più opzioni. Dobbiamo specificare quale opzione utilizzeremo le istruzioni switch case e dalla riga di comando utilizzando l'opzione -shorthand. In questo caso, abbiamo utilizzato -n per nome E -a per età . Abbiamo anche un controllo dei casi predefinito o non valido per evitare di analizzare argomenti errati. Possiamo assegnare il valore dell'opzione usando il OPTARG variabile che analizza il valore fornito all'opzione.

Il ciclo while qui viene utilizzato per eseguire l'iterazione finché non vengono passate opzioni dalla riga di comando. Controlliamo l'opzione -n ​​e -a e iteriamo finché non viene premuto il tasto Invio o Ritorno a capo e non ci sono ulteriori opzioni da analizzare.

Ciclo while in stile C

Possiamo usare il ciclo while in stile C in BASH, le variabili devono essere valutate con lo stile BASH ma la sintassi generale sembra C. Possiamo usare gli operatori come , <= e così via nella condizione del ciclo while e quindi è chiamato come il ciclo while in stile C.

Per prima cosa creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso utilizziamo l'editor di testo `vim`.

vim c-style-while.sh 

#!/bin/bash
io=0
mentre ((i <12))
Fare
eco $i
((i+=2))
Fatto

c-stile-mentre

c-stile-mentre

In questo esempio, possiamo vedere che il ciclo while ha una condizione con operatori non bash come -le, -ge, ecc. Invece utilizziamo gli operatori in stile C nella condizione. Il resto del ciclo è il ciclo base come in BASH, la variabile o iteratore i viene incrementata di due come possiamo vedere nell'ultima istruzione del corpo del ciclo. Pertanto il ciclo viene ripetuto più di 5 volte.

Ciclo while per eseguire operazioni su un file

Possiamo eseguire operazioni su un file, come leggere solo una parte particolare di un file. Se abbiamo colonne formattate in un modo particolare, possiamo utilizzare le variabili per assegnarle e stamparle una riga di dati.

Ecco il nome del file di esempio wh.txt

vim wh.txt 

creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso stiamo utilizzando l'editor di testo `vim`.

vim file-while.sh 

Tipo di lingua rilasciato

Python generale 1991

Javascript web 1995

Javamobile 1995

Ruggine incorporata 2010

Torna alla fine del 2007

creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso stiamo utilizzando l'editor di testo `vim`.

vim file-while.sh 

#!/bin/bash

mentre leggi abc
Fare
eco $b – $a
Fatto

Ciclo while in Linux

Ciclo while in Linux

In questo esempio abbiamo tre righe, leggiamo il contenuto assegnandolo alle variabili a,bec, può essere qualsiasi cosa tu voglia ma ricordati di usarle nel corpo del loop. Possiamo selezionare una colonna particolare come b e a e possiamo stampare o eseguire qualsiasi operazione su di esse. Ciò non si rifletterà nel file, poiché sono solo variabili di script locali.

Scrittura su un file utilizzando un ciclo while

Possiamo scrivere su un file tramite input dell'utente in un ciclo while. Possiamo usare il ciclo while per scorrere finché non usciamo manualmente dal ciclo usando CTRL + D salvando le modifiche al file o CTRL + C per evitare di scrivere nel file. Usiamo il comando read per inserire il testo dalla riga di comando e analizzarlo nel file.

Per prima cosa creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso utilizziamo l'editor di testo `vim`.

vim write-wh.sh 

#! /bin/bash

file=wh.txt
echo Inserisci il contenuto nel file $file
durante la lettura della riga
Fare
echo $riga>> $file
Fatto

ciclo while in Linux

ciclo while in Linux

Quindi, dall'esempio sopra, siamo stati in grado di inserire testo in un file utilizzando un ciclo while e leggere il comando. Per uscire dal ciclo e salvare le modifiche al file, utilizziamo i tasti CTRL+ D, mentre per uscire dal ciclo senza salvare nulla nel file possiamo utilizzare i tasti CTRL+C. Inseriamo quindi il testo dalla riga di comando nel file di testo utilizzando il comando read e un ciclo while.

Interrompi e continua a utilizzare while Loop

Break e continue sono essenziali in un programma che si occupa delle istruzioni di loop poiché controllano il flusso delle istruzioni di loop senza alcuna condizione esplicita.

Dichiarazione di interruzione nel ciclo While

Utilizziamo le istruzioni break per uscire dal ciclo senza attendere che la condizione del ciclo while venga valutata come falsa. Questa istruzione può essere utilizzata all'interno di un blocco di loop. Questo può essere utilizzato per uscire da un ciclo infinito con una condizione programmatica all'interno del ciclo e quindi mantenere il controllo del ciclo.

Ad esempio, abbiamo uno script che conta da 1 a sempre. Ma possiamo uscire dal ciclo a livello di codice utilizzando un'istruzione break all'interno del corpo del ciclo con una condizione.

Per prima cosa creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso utilizziamo l'editor di testo `vim`.

vim while.sh 

#!/usr/bin/bash

io=1
Mentre :
Fare
eco $i
se [$i -eq 20]; Poi
echo Questa è la fine del ciclo
rottura
Essere
((i++))
Fatto

Interrompe l

Interrompe l'istruzione while loop in Linux

Dallo script e dall'esecuzione possiamo vedere che siamo riusciti a interrompere o uscire da un ciclo infinito con un'istruzione condizionale e l'istruzione break. Pertanto l'istruzione break viene utilizzata per far sì che il flusso di controllo di un programma/script dall'interno di un ciclo while esca dal ciclo senza che la condizione del ciclo diventi falsa.

Continua l'istruzione in While Loop

Possiamo usare l'istruzione continue per fare l'opposto dell'istruzione break. Salterà all'inizio del blocco del ciclo e ripeterà di nuovo. Questo può essere utilizzato per saltare determinati comandi per determinate condizioni e quindi consente un cambiamento nel flusso del ciclo.

Ad esempio, se abbiamo una variabile inizializzata su 1 e vogliamo visualizzare solo i numeri divisibili per cinque o secondo un determinato schema seguendo una condizione, possiamo usare le istruzioni continue per fare proprio questo. Ciò consente di eseguire l'iterazione del ciclo nel modo desiderato.

Per prima cosa creiamo un file di testo utilizzando un editor di testo in Linux, in questo caso utilizziamo l'editor di testo `vim`.

vim while.sh 

#!/usr/bin/bash

io=1
mentre [$i -lt 30];
Fare
((i++))
if [[ $(( $i % 5 )) -ne 0 ]];
Poi
Continua
Essere
eco $i
Fatto

Continua l

Continua l'istruzione nel ciclo While in Linux

Come possiamo vedere l'istruzione continue, salta all'inizio del blocco e avvia l'esecuzione dei comandi saltando i comandi successivi all'interno del blocco. Il ciclo while esegue l'iterazione solo per il valore di variabile i essendo inferiore a 30, quindi la condizione if controlla se il variabile i è divisibile per 5 e, in caso contrario, iteriamo di nuovo utilizzando continue e incrementiamo il valore della variabile i. IL variabile i viene ripetuto solo se è divisibile per 5, quindi la condizione if viene valutata come falsa e non incontriamo un'istruzione continue e proseguiamo con il normale flusso del ciclo. Questo viene fatto per evitare la registrazione di ogni numero e stampare solo i numeri che non seguono uno schema o una condizione nell'istruzione if o in altre istruzioni condizionali.

Domande frequenti

1. Cos'è un ` while`> loop nello scripting Bash?

UN while> loop è un'istruzione del flusso di controllo negli script Bash che consente l'esecuzione ripetuta di un determinato blocco di codice purché una condizione specificata sia vera. Il ciclo fornisce un modo per automatizzare le attività ripetitive ed è un costrutto fondamentale nello scripting e nella programmazione.

2. Come funziona la sintassi di un file ` while`> guardare il ciclo in Bash?

La sintassi di base di a while> il ciclo in Bash è il seguente:

mentre [condizione]
Fare
# Codice da eseguire mentre la condizione è vera
Fatto

Il ` condition`> è un test che si verifica prima di ogni iterazione del ciclo. Se la condizione è vera, viene eseguito il codice all'interno del ciclo. Se la condizione è falsa, il ciclo termina e lo script continua con il comando successivo dopo ` done`> dichiarazione.

3. Qual è il ruolo del ` (( ... ))`> costruire in una Bash while> ciclo continuo?

Il ` (( ... ))`> il costrutto in Bash viene utilizzato per le operazioni aritmetiche. Nel contesto di un ` while`> loop, viene spesso utilizzato per valutare le condizioni aritmetiche.

Per esempio: ` ((i <10))> `> controlla se la variabile ` i`> è inferiore a 10. Ciò consente di utilizzare espressioni aritmetiche direttamente nella condizione del ciclo, rendendolo particolarmente utile quando si gestiscono confronti numerici.

4. Come creare un ciclo infinito utilizzando ` while`> a Bash?

È possibile creare un ciclo infinito in Bash fornendo una condizione che risulti sempre vera.

Per esempio:

mentre è vero
Fare
# Codice per il ciclo infinito
Fatto

In alternativa, puoi utilizzare una costante diversa da zero nella condizione, come ` while [ 1 ]`> , per ottenere lo stesso risultato. I cicli infiniti sono utili in situazioni in cui è richiesta l'esecuzione continua fino all'interruzione manuale.

Conclusione

In questo articolo abbiamo discusso del ciclo while di scripting BASH che si rivela uno strumento versatile per eseguire ripetutamente un blocco di codice in base a una condizione specificata. La sintassi di base prevede la definizione della condizione tra parentesi quadre, consentendo iterazioni flessibili. L'articolo esplora diverse applicazioni dei cicli while, inclusa la lettura da file, la creazione di cicli infiniti, iterazioni fisse, l'analisi di argomenti della riga di comando e l'utilizzo di istruzioni break e continue. Dalla sintassi in stile C alla scrittura interattiva di file, ogni esempio dimostra l'adattabilità del loop nell'affrontare una serie di esigenze di scripting. Questa panoramica completa sottolinea l’importanza del ciclo while nello scripting BASH, fornendo un meccanismo robusto per la ripetizione controllata e l’esecuzione efficiente del codice.



Articoli Più

Categoria

Articoli Interessanti