Primer: Bash Loop: per, mentre e fino a

Contenuti

La maggior parte dei linguaggi di programmazione supporta più alternative per il ciclo di righe di codice. Bash supporta nativamente i cicli 'while', loop 'up’ e il "for loop"’ meglio conosciuto. Questo post presenta e analizza i tre.

Quali sono Bash Loop?

Per impostare questo un po' meglio, dovremmo iniziare con la domanda cosa sono i loop?. I loop sono una costruzione del linguaggio di programmazione, che consente a uno sviluppatore di ripetere (In altre parole, ripetere) certe parti, il tutto, del codice all'interno di quella definizione di ciclo. Ora è facile da impostare Bash Loop come qualsiasi costrutto di linguaggio di programmazione in loop utilizzato in bash!

Bash supporta nativamente i loop basati su "for", 'fino a’ e 'mentre'. Ognuno di questi ha i suoi vantaggi, ma puoi già farti un'idea dei loro significati solo guardando l'idioma della parola principale. Come esempio, 'fino a’ porta a pensare naturalmente di "fare qualcosa fino a quando"’ e questo è ciò che fanno i loop bash 'fino a'; ripetere una certa quantità di codice (il tutto) fino a quando non viene soddisfatta una certa condizione.

Equivalentemente, los bucles 'mentre'’ continuano a funzionare finché una condizione non è più vera. Finire, il "per loop"’ si ripetono, come esempio, un numero definito di volte, equivalente a come scriveremmo 'per' 70 volte, fare…'. Questo ci aiuta a comprendere logicamente le caratteristiche uniche fornite da ogni ciclo e ad implementare un codice più leggibile..

di Cicli bash basati

Ai fini di questo post, vedremo il modo più nuovo per impostare Bash per i loop. Una definizione un po' più antica e meno moderna di di loop in bash can, come esempio, Assomiglia a questo: for i in $(seq 1 5); do echo $i; done. Confrontiamolo con un aspetto più pulito, meglio strutturato e moderno. di cerchio:

per ((i=1;io<=5;io++)); fai eco $i; fatto

Un ciclo basato su Bash per

così semplice di Bash one-liner basato su (una definizione spesso usata negli ambienti Linux / Bash per concettualizzare un mini-script scritto su una singola riga) stamperà i numeri del 1 al 5 in ordine sequenziale. Impostiamo un valore iniziale per il i variabile ($i) assegnando il valore 1 lo stesso, come prima parte del nostro di definizione del ciclo, finito da a ; delimitatore.

Prossimo, precisiamo che ne abbiamo solo uno da caricare "Meno o uguale a cinque"’ attraverso l'uso i<=5. Successivamente indichiamo cosa dovrebbe succedere alla fine di ogni round, e questo sta aumentando la variabile i per uno, oh, in un'abbreviazione di codifica comunemente usata (incluso nel linguaggio C ++, come esempio), questo si traduce come i++.

Per finire specifichiamo l'inizio del nostro codice di ciclo usando do, In altre parole, dopo aver terminato il nostro for definizione del ciclo, proprio come qualsiasi altra conclusione di affermazione, insieme a ; prima do. Inoltre specifichiamo la fine del nostro codice di ciclo usando done e noi echo (stampare) il valore della nostra variabile io tra do e done.

Si noti inoltre in particolare che il do la clausola stessa non finisce con ;, e farlo causerebbe un errore. Considera il do un prefisso a cosa fare, e ha più senso. Questo forse uno dei motivi per cui a volte è più pulito inserire le cose in uno script multilinea, dato che do potrebbe essere solo l'ultima parola su una riga.

Anche quando si impostano altri tipi di loop, continueremo a mantenere la do e done clausole, e faremo sempre in modo di completare la nostra definizione del ciclo (In altre parole, prima do) insieme a ;, oltre a finalizzare la fine di ogni singola dichiarazione all'interno del nostro do...done definizione del ciclo con ;.

Mettiamolo in un piccolo copione per vedere più chiaramente come le cose possono funzionare in questo modo.:

#!/bin/bash

for ((i=1;io<=10;i+=2)); do 
  echo $i
done

Uno script di loop basato su Bash per

Dopo aver reso lo script eseguibile con chmod +x test.sh, eseguiamo lo stesso. Sono state apportate alcune piccole modifiche allo script. Nota come questa volta, stiamo aumentando la variabile i per due ogni volta. Questo viene fatto usando un'altra abbreviazione di codifica, vale a dire i+=2 che può essere letto come aumentare i di due. Puoi anche scrivere i=i+2 nello stesso posto, e funziona esattamente lo stesso.

Vediamo che iniziamo in 1e aumentare in 2 ogni volta che passiamo attraverso il ciclo, che finisce in 9. Il motivo per cui finisce in 9 è che il valore massimo è 10. Perché, dopo 9 il prossimo valore sarebbe 11, che è maggiore di 10 ed è per questo che non si vede / link.

Considera anche come ; è stato rimosso dopo la linea dell'eco. Questo perché non è necessario terminare la fine di un'istruzione se invece c'è una situazione / carattere di fine riga. Questo è il caso qui; non abbiamo nessun altro comando dopo il echo $i e la linea finisce subito (anche gli spazi alla fine della riga andrebbero bene, il principio è semplicemente non avere un altro comando a meno che quel nuovo comando non abbia il prefisso (e il precedente è finito) di ;).

tempo metereologico Cicli bash basati

Prossimo, diamo un'occhiata a un ciclo bash, usando lo stesso do...done definizione del ciclo, possiamo stabilire a mentre il ciclo basato su bash da eseguire fintanto che una data condizione è vera.

i=1; mentre [ $al 5 ]; fai eco $i; io=$[ io + 1 ]; fatto

Un ciclo basato su Bash while

In questo esempio, facciamo lo stesso del nostro primo di esempio di loop basato. Anche se la definizione sembra più complessa (ed è per questo che uno di loop potrebbe essere più adatto per questo particolare caso d'uso), è interessante vedere come possiamo stabilire a tempo metereologico loop allo stesso modo.

Qui per prima cosa impostiamo il nostro i variabile, manualmente, in un comando separato terminato da ;, per 1. Prossimo, abbiamo iniziato un tempo metereologico loop dove impostiamo una condizione, in un modo molto equivalente alla definizione di a if dichiarazione (c'è un link alla fine di questo post a un post su if dichiarazioni per maggiori informazioni), dove stiamo controllando se il i la variabile è minore o uguale (-le) dopo 5.

Dopo questo abbiamo il nostro frequente do...done blocco in cui echo la nostra variabile, e successivamente, in una nuova dichiarazione, manualmente, aumentare il valore del nostro i variabile di uno in un calcolo matematico come definito dal $[...] Idiomi di calcolo di Bash. Prossimo, esaminiamo un fino a bash basato su loop

fino a Cicli bash basati

Armati di ciò che abbiamo imparato finora, ora possiamo esaminare più facilmente quanto segue fino a basato sul ciclo bash:

i=1; fino a [ $io -gt 5 ]; fai eco $i; io=$[ io + 1 ]; fatto

Un ciclo basato su bash fino a

Qui cerchiamo la condizione io più grande di 5 diventare vero. Fino a quel momento (In altre parole, un fino a loop basato su), stamperemo (usando echo) la nostra variabile io e aumentare lo stesso con uno, uguale al nostro precedente tempo metereologico basato su esempi.

Possiamo vedere come la sintassi del fino a è molto equivalente a tempo metereologico comando. Nota anche che, a differenza di for basato su comandi, Questi comandi sono alla ricerca di un certo condizione di persistere (insieme a tempo metereologico), o per un certo condizione per l'avvio (insieme a fino a). In questo modo è inoltre possibile utilizzare altri comandi in grado di restituire un output equivalente a true / impostore, come esempio grep -q:

eco 1 > a
while grep -q '1' ./a; fare eco 'sì'; dormire 5; fatto

Verifica di uno stato reale utilizzando grep -q in un ciclo bash basato su while

Qui aggiungiamo il numero 1 in un file chiamato une verifica l'esistenza del numero 1 all'interno di quel file usando a grep -q (un grep silenzioso). Continuiamo a farlo (In altre parole tempo metereologico) finché non è più vero. Anche se è vero, stampiamo il testo e metti in pausa il loop per cinque secondi con sleep 5. Nota come ogni comando finisce con ; ancora.

Dopo circa 17 secondi, interrompiamo il nostro script usando CTRL + C, che è il metodo universale per fermare una procedura in esecuzione in bash (contemporaneamente al CTRL + z Più forte e più efficace rispetto all'interruzione immediata di una procedura, Ma questo è per un altro post!)

Fine

In questo post, controlliamo i cicli 'for', 'mentre’ y 'fino a’ che sono nativamente disponibili in Bash. Se sei interessato a più bash, dai un'occhiata ai test condizionali in bash: Se, poi, altro, funzioni elif e bash e variabili locali.

Godere!

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.