Bash Loops in profondità

Bash Loops in profondità
Un ciclo è costituito da uno o più comandi che eseguono ripetutamente fino a quando non viene soddisfatta una condizione. Affinché ciò accada, i comandi devono essere in un costrutto. Il costrutto e i suoi comandi formano un comando composto. Un comando bash esce con zero se non c'erano problemi. D'altra parte, esce con un numero maggiore di zero se c'era un problema o un problema. Lo stato di uscita di un comando composto è quello del suo ultimo comando.

Per capire questo articolo, il lettore dovrebbe già conoscere semplici comandi bash. È spiegato qualsiasi comando bash non semplice utilizzato in questo articolo. Non dimenticare che i comandi bash possono essere scritti in un file di testo e il file di testo può eseguire digitando il nome del file (preceduto dal percorso) nel terminale, quindi premendo Invio. Non dimenticare anche di permetterti di eseguire il file con qualcosa di simile:

sudo chmod +x programma_name

Contenuto dell'articolo

  • Nozioni di base sul ciclo Bash
  • Bash Break e Continua comandi
  • Esempi di loop utili
  • Conclusione

Nozioni di base sul ciclo Bash

Bash fino a/fatto Loop
Considera il seguente codice:

Sia n = 0
fino a ["$ n" -eq 5]; Fare
Echo $ n
((++ n))
Fatto

L'output è:

0
1
2
3
4

Quando inizia il programma, la variabile N viene dichiarata e zero è assegnata. I due comandi prima di "fatti" vengono eseguiti 5 volte. ((++ n)) incrementi n di 1 per ogni iterazione. Nota le posizioni delle parole riservate, "fino", "fare" e "fatto". I due comandi vengono ripetuti fino alla condizione, ["$ n" -eq 5]. Nella condizione, "-eq" significa "uguale a". La condizione è che il valore di n è uguale a 5. Si noti che i valori echeggiati iniziano da 0 a 4. Questo perché, per ogni iterazione, viene verificata la condizione del costrutto, prima che il corpo (due comandi) del costrutto venga eseguito. Se la condizione è falsa, il corpo non sarebbe eseguito. La parola riservata, "fatto", dovrebbe sempre essere digitata in una nuova linea.

La sintassi per il loop fino a/fatto è:

fino a test-comands; comandi conseguenti; Fatto

Il secondo punto e virgola non è necessario se la parola riservata, "fatta" è digitata in una nuova linea.

Se la condizione esce con zero, che significa vero, il corpo del ciclo viene eseguito. Se la condizione esce con un numero maggiore di zero, che significa falso, il corpo del ciclo non viene eseguito.

Bash while/fatto Loop
Questo ciclo è simile al loop fino a/fatto, tranne per il fatto che la condizione deve essere riformulata. Entrambi i costrutti usano la parola riservata "do". Il seguente codice produce lo stesso output di prima:

Sia n = 0
mentre ["$ n" -lt 5]; Fare
Echo $ n
((++ n));
Fatto

Nella condizione nel codice, "-lt" significa "meno di". La sintassi per il ciclo white/fatto è:

mentre i comandi di test; comandi conseguenti; Fatto

Bash per/fatto Loop
Esistono due sintassi per il ciclo "per", che sono:

per ((expr1; expr2; expr3)); fare comandi; Fatto

E

per il nome [[in [parole ...]]; ] comandi; Fatto

Il seguente codice utilizza la prima sintassi per produrre lo stesso risultato, come sopra:

per ((n = 0; n < 5; ++n)); do
Echo $ n
Fatto

Nel (comando composto, la prima espressione inizializza la variabile da N a zero. La prossima espressione è la condizione while. L'ultima espressione nel comando composto a doppia parentesi è l'espressione dell'incremento. Quindi c'è il corpo, che può consistere in più di un comando, e poi "fatto".

La seconda sintassi è meglio utilizzata con un array - vedi sotto.

Bash Break e Continua comandi

rottura
Tutte le iterazioni (ripetuta esecuzione del corpo) destinate a un ciclo non devono necessariamente essere eseguite. Il comando Break può essere usato per fermare le iterazioni rimanenti. Nel codice seguente, le iterazioni si fermano subito dopo N è uguale a 2.

per ((n = 0; n < 5; ++n)); do
Echo $ n
if ((n == 2)); Poi
rottura
fi
Fatto

L'output è:

0
1
2

In questo ciclo, tre iterazioni hanno avuto luogo.

Continua
Un'iterazione può essere saltata usando il comando Continua. Il seguente codice illustra questo:

per ((n = 0; n < 5; ++n)); do
if ((n == 2)); Poi
Continua
fi
Echo $ n
Fatto

L'output è:

0
1
3
4

L'iterazione da visualizzare 2 è stata saltata.

I comandi di Break and Continua possono anche essere utilizzati nei loop fino a/when/when.

Esempi di loop utili

Esempio di loop fino a/fatto
Il comando per creare un file di testo vuoto viene toccato. Il seguente script creerà file di testo vuoti nella directory di lavoro corrente, fino a quando il numero di file creati, è 4:

Lascia che i = 1
file = "myfile"
fino a [$ i -eq 5]; Fare
filename = "$ file $ i.TXT"
Tocca $ nome file
((++ i))
Fatto

I nomi dei file creati dovrebbero essere myfile1.txt, myfile2.txt, myfile3.txt e myfile4.TXT.

L'unico punto e virgola nel codice può essere omesso se "fare" è digitato nella riga successiva.

mentre/fatto Esempio di loop
Il comando per creare una directory vuota è mkdir. Il seguente script creerà directory vuoti nella directory di lavoro corrente fino a quando il numero di directory creati è 4:

i = 1
dir = "mydir"
mentre [$ i -lt 5]; Fare
dirname = "$ dir $ i"
mkdir $ dirname
((++ i))
Fatto

Il nome delle directory create dovrebbe essere mydir1, mydir2, mydir3 e mydir4.

L'unico punto e virgola nel codice può essere omesso se "fare" è digitato nella riga successiva.

Per esempio di loop
La seconda sintassi per il per loop sopra menzionato è:

per il nome [[in [parole ...]]; ] comandi; Fatto

Questa sintassi è meglio utilizzata con un elenco. In termini semplici, la sintassi è:

per variabile nell'elenco; fare comandi; Fatto

L'elenco può essere un array. Il comando seguente legge una riga di input di testo dal terminale nell'array arr:

Leggi arr

Man mano che lo script è in esecuzione, quando raggiunge questo comando, si fermerà (con un cursore lampeggiante) per l'utente di inserire input. Se i tipi utente:

uno due tre

In una riga e le pressioni entrano, quindi il primo elemento dell'array avrebbe la parola "uno", il secondo avrebbe la parola "due" e il terzo avrebbe "tre". Si noti che i valori di input sono stati separati da spazi.

Il seguente codice utilizza la seconda sintassi per loop per leggere e visualizzare un input allo script:

Echo "Digita i valori e premi Invio:"
Leggi arr
per var in $ arr; Fare
echo $ var
Fatto

Se l'input era:

uno due tre

Allora l'output sarebbe:

uno
due
tre

L'unico punto e virgola nel codice può essere omesso se "fare" è digitato nella riga successiva.

Comando bash select

Il comando Select non è proprio un ciclo. Tuttavia, comporta un'iterazione, che non è codificata dal programmatore. In termini semplici, la sintassi del comando Seleziona è:

Seleziona elemento in [Elenco]
Fare
[Comandi]
Fatto

Qui, "Seleziona", "In", "Do" e "Done" sono parole riservate. Un uso del comando Seleziona è visualizzare gli elementi dall'elenco al terminale. Il seguente script illustra questo:

Seleziona Articolo in banana, limone, arancione, pera, ananas
Fare
rottura
Fatto

Nota l'uso del comando Break. L'output è:

1) Banana,
2) limone,
3) Arancia,
4) Pear,
5) Ananas
#?

L'elenco è costituito dai valori banana, limone, arancione, pera e ananas. Questi valori sono stati visualizzati e numerati. Il simbolo "#?"(E il cursore lampeggiante accanto ad esso) si aspetta che l'utente digiti qualcosa e premi il tasto Invio. Digita qualsiasi cosa, quindi premi il tasto Invio e finalmente termina l'esecuzione dello script.

Si noti che l'elenco è stato visualizzato come menu, numerato, per l'output. Con questo, l'utente può selezionare un elemento nel menu digitando il numero corrispondente, accanto a "#?", Quindi premere il tasto Invio. Il seguente script illustra come viene selezionato Orange digitando il numero 3:

Seleziona Articolo in banana, limone, arancione, pera, ananas
Fare
Echo $ Rispondi
rottura
Fatto

Il display di output è:

#? 3
Poi
3

Conclusione

Un ciclo in Bash è un costrutto; Un costrutto è un comando composto. Il corpo del costrutto ha almeno un comando. A partire da ora, Bash ha solo tre loop, che sono fino a/fatti, mentre/fatti e per/fatti. Ogni loop utilizza la parola riservata "fare". Dopo che la condizione è stata digitata, "do" dovrebbe essere preceduta da ';' o essere digitata nella riga successiva del codice. Ogni ciclo prende una condizione. I loop fino a/fatti e while/worse sono simili. La differenza principale si verifica durante la codifica della condizione.

Il comando Select è un comando composto, ma non è proprio un loop. Consente all'utente di selezionare un elemento da un elenco di menu quando lo script è in esecuzione in modo interattivo.

I comandi Break and Continua possono essere utilizzati in un ciclo. Il comando Break può essere usato per fermare le iterazioni. D'altra parte, il comando continua può essere usato per saltare un'iterazione.

Questo è tutto ciò che c'è da colpire i loop. La funzionalità rimanente da studiare è "come codificare le condizioni?". Questo merita un articolo completamente diverso e non può essere incluso in questo. Vedi l'articolo su questo sito Web, intitolato "Bash Conditionals Inshepth", su come codificare le condizioni.

Chrys