Ci sono molte volte in uno script di shell quando si desidera eseguire ripetutamente un'istruzione o un gruppo di istruzioni finché non si verifica una condizione specificata. Inoltre, potresti voler eseguire un gruppo di istruzioni per ogni elemento in un determinato elenco. La shell fornisce tre costrutti di loop per queste situazioni:i costrutti for, while e until.
Il ciclo for consente di specificare un elenco di valori. Viene eseguito un gruppo di istruzioni per ogni valore nell'elenco.
Per la sintassi del ciclo
Il ciclo for nella shell accetta un elenco di parole (stringhe) come argomento. Il numero di parole nell'elenco determina il numero di volte in cui vengono eseguite le istruzioni nel ciclo for. La sintassi per il ciclo for è:
for variable in element1 element2 element3 do commands done
dove:
- variabile :è qualsiasi nome di variabile.
- elementi (elenco_argomenti) :può essere qualsiasi elenco di parole, stringhe o numeri e può essere letterale o generato utilizzando un comando della shell o un metacarattere della riga di comando della shell.
- comandi :I comandi possono essere qualsiasi comando del sistema operativo, un programma utente, uno script di shell o un'istruzione di shell che restituisce (produce) un elenco.
Il valore della variabile var viene impostato sulla prima parola nell'elenco la prima volta che si esegue il ciclo. La seconda volta che si esegue il ciclo, il suo valore viene impostato sulla seconda parola nell'elenco e così via. Il ciclo termina quando var ha assunto a sua volta ciascuno dei valori dall'elenco degli argomenti e non ci sono argomenti rimanenti.
L'elenco degli argomenti del ciclo for
L'elenco di argomenti in un ciclo for può essere qualsiasi elenco di parole , stringhe o numeri . Genera l'elenco di argomenti utilizzando uno dei seguenti metodi (o una combinazione di metodi):
- Utilizza un elenco esplicito
- Utilizza il contenuto di una variabile
- Utilizza argomenti della riga di comando
- Usa la sostituzione dei comandi
- Usa i nomi dei file nella sostituzione dei comandi
Esempio 1:ciclo For che utilizza un elenco esplicito per specificare argomenti
Quando gli argomenti sono elencati per un ciclo for, sono chiamati un elenco esplicito. Un elenco esplicito è la forma più semplice di un elenco di argomenti. Il ciclo viene eseguito una volta per ogni elemento dell'elenco. L'esempio seguente è un ciclo for che utilizza un elenco esplicito di elementi:
#!/bin/bash for fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit" done
L'output di questo ciclo for è:
Value of fruit is: apple Value of fruit is: orange Value of fruit is: banana Value of fruit is: peach Value of fruit is: kiwi
Esempio 2:ciclo For usando i contenuti variabili per specificare gli argomenti
Quando gli argomenti sono in una variabile e l'istruzione viene eseguita, il contenuto della variabile viene sostituito. Nell'esempio seguente, il testo immesso al prompt diventa il valore della variabile INPUT. Questa variabile rappresenta l'elenco degli argomenti del costrutto for. Pertanto, il testo in INPUT è suddiviso in parole o token basati su spazi bianchi.
$ cat ex1.sh #!/bin/bash # Script name: ex1.sh echo "Enter some text: \c" read INPUT for var in $INPUT do echo "var contains: $var" done
$ ./ex1.sh Enter some text: I like the Bash shell. var contains: I var contains: like var contains: the var contains: Korn var contains: shell.
Esempio 3:ciclo For usando argomenti della riga di comando per specificare argomenti
Nell'esempio seguente, il testo immesso nella riga di comando diventa l'elenco degli argomenti del costrutto for. Pertanto, il testo della riga di comando è suddiviso in parole o token basati su spazi bianchi.
$ cat ex2.sh #!/bin/bash # Script name: ex2.sh for var in $* do echo "command line contains: $var" done
$ ./ex2.sh I am The Geek. command line contains: I command line contains: am command line contains: The command line contains: Geek.
Esempio 4:ciclo For che utilizza la sostituzione dei comandi per specificare gli argomenti
La sintassi per la sostituzione dei comandi in una shell Bash è:
for var in `cmd_sub`
L'esempio seguente utilizza l'output del comando cat come elenco di argomenti.
$ cat fruit1 apple orange banana peach kiwi
$ cat ex4.sh #!/bin/bash # Script name: ex4.sh for var in `cat fruit2` do echo "var contains: $var" done
$ ./ex4.sh var contains: Apple var contains: Orange var contains: Banana var contains: Peach var contains: Kiwi
Se il file contenente l'elenco era nel seguente formato, qual è il risultato del ciclo for.
$ cat fruit3 Apple Orange Banana Peach Kiwi
$ cat ex5.sh #!/bin/bash # Script name: ex5.sh for var in `cat fruit3` do echo "$var" done
$ ./ex5.sh Apple Orange Banana Peach Kiwi
Nell'esempio sopra, i risultati non cambiano. La variabile IFS è qualsiasi spazio bianco, quindi sia un ritorno a capo che uno spazio o una tabulazione separano ogni campo nel file.
Esempio 5:ciclo For che utilizza i nomi dei file nella sostituzione dei comandi per specificare gli argomenti
Alcuni comandi forniscono nomi di file e nomi di directory come output. Nell'esempio seguente, la shell sostituisce l'output del comando, ls /etc/p*(/etc/passwd/etc/profile e così via), come elenco di argomenti per il ciclo for.
$ cat ex7.sh #!/bin/bash # Script name: ex7.sh for var in `ls /etc/p*` do print "var contains: $var" done
# ./x.sh var contains: /etc/passwd var contains: /etc/passwd- var contains: /etc/printcap var contains: /etc/profile ....Bash if loop esempi (se allora fi, se poi elif fi, se poi altrimenti fi)