LIVELLO:SYSADMIN / TEMPO:1-2 min.
Ecco alcuni pratici esempi di riferimento rapido a cui tornare facilmente se è necessario utilizzare per, mentre e fino a loop negli script della shell bash. Questo è perfetto per aggiungere un segnalibro e tornare in un secondo momento. Dimentico sempre le sottili differenze di sintassi che bash ha rispetto ad altri linguaggi che uso, ad esempio C, PHP, Python ecc.
Prima di mostrarti gli esempi, vale la pena sapere quando utilizzare ogni tipo di loop:
- Il per loop è leggermente diverso dagli altri linguaggi di programmazione. Fondamentalmente, ti consente di scorrere una serie di elementi all'interno di una stringa.
- Il mentre loop esegue gli elementi da eseguire se l'espressione di controllo è vera e si interrompe solo quando è falsa (o viene trovata un'interruzione esplicita all'interno del codice eseguito.
- Il fino loop è quasi identico al ciclo while, tranne per il fatto che il codice viene eseguito mentre l'espressione di controllo restituisce false.
PER Esempio 1:ripetizione semplice
Questo semplice tipo di ciclo conta semplicemente i valori forniti. In questo caso, inizia da 1 e arriva a 5. È la ripetizione più elementare.
#!/bin/bash
for i in 1 2 3 4 5
do
echo "Hello, I've done this loop $i times"
done
PER Esempio 2:Ripeti un'azione 50 volte:
La ripetizione può essere eseguita partendo da un valore e incrementando un contatore. È come faresti con linguaggi di programmazione più convenzionali. L'unica cosa che devi ricordare è usare il (( per esprimere un calcolo numerico.
#!/bin/bash
for ((i=1;i<=50;i++));
do
# your command, eg: echo $i
done
Questo esempio fa esattamente quello che dovrebbe fare. Ma ci sono modi più semplici che non devono farti ricordare la doppia parentesi leggermente esoterica. Dai un'occhiata agli esempi seguenti.
PER Esempio 3:Lavorare con intervalli numerici
Intervalli
A volte potrebbe essere necessario impostare un valore di passo (ad esempio, contare per due o contare all'indietro). Tieni presente che bash versione 3.0+ ha un supporto integrato per l'utilizzo degli intervalli, ma non è molto pratico per gli intervalli di passi:
#!/bin/bash
for i in {1..5}
do
echo "This is the $i iteration of this loop"
done
Passo:
#!/bin/bash
for i in {1..5}
do
echo "This is the $i iteration of this loop"
done
La maggior parte delle moderne distribuzioni Linux esegue Bash v4.0+, che ha il supporto integrato per l'impostazione di un valore di passaggio utilizzando {START.. FINE.. INCREMENT} sintassi:
#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
do
echo "This is the $i iteration of this loop"
done
Uscita:
This is the 0 iteration of this loop
This is the 2 iteration of this loop
This is the 4 iteration of this loop
This is the 6 iteration of this loop
This is the 8 iteration of this loop
This is the 10 iteration of this loop
PER Esempio 4:Lavorare su parole, argomenti e output di comandi
In precedenza abbiamo lavorato su intervalli numerici, ma il problema è che il ciclo FOR valuta argomenti piuttosto che numeri, un numero è semplicemente un . Ciò significa che puoi dirgli di operare su ogni iterazione basata su riga. Ad esempio, quanto segue eseguirà il comando ls. Per ogni elemento che vede farà eco alla linea. Nota che funziona su una stringa di parole, non su un elenco di righe. Quindi, se usi ls -l, non fornirà un output utile, nota anche che se hai nomi di file con spazi, li interpreta come parole diverse (argomenti forniti a per ).
#!/bin/bash
for i in $( ls *txt ); do
echo item: $i
done
WHILE Esempio:
Mentre essenzialmente emula il linguaggio di programmazione più classico per la struttura del ciclo:
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done
FINO A Esempio:
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done