The Geek Diary
Ci sono molte volte in uno script di shell quando si desidera eseguire ripetutamente un’istruzione o un gruppo di istruzioni fino a quando non si verifica una condizione specificata. Inoltre, è possibile 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. Un gruppo di istruzioni viene eseguito per ogni valore nell’elenco.
Sintassi del ciclo For
Il ciclo for nella shell prende 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: è un nome di variabile qualsiasi.
- elements (argument_list): Può essere qualsiasi elenco di parole, stringhe o numeri, e può essere letterale o generato usando un comando shell o un metacarattere da riga di comando 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 è impostato sulla prima parola nell’elenco la prima volta attraverso il ciclo. La seconda volta attraverso il ciclo, il suo valore è impostato sulla seconda parola nell’elenco e così via. Il ciclo termina quando var ha assunto ciascuno dei valori dall’elenco degli argomenti, a sua volta, e non ci sono argomenti rimanenti.
L’elenco degli argomenti del ciclo for
L’elenco degli argomenti in un ciclo for può essere qualsiasi elenco di parole, stringhe o numeri. Generare un elenco di argomenti utilizzando uno dei seguenti metodi (o combinazione di metodi):
- Utilizzare un elenco esplicito
- Utilizzare il contenuto di una variabile
- Utilizzare argomenti della riga di comando
- Utilizzare la sostituzione di comando
- Utilizzare nomi di file in sostituzione di comando
Esempio 1 : Per il ciclo utilizzando un Elenco Esplicito di Specificare gli Argomenti
Quando gli argomenti sono elencati per un ciclo for, essi 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 della lista. L’esempio seguente è un loop utilizzando un elenco esplicito di elementi:
#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done
L’uscita 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 : Per il loop con il Contenuto della Variabile per Specificare gli Argomenti
Quando gli argomenti sono in una variabile e viene eseguita l’istruzione, il contenuto della variabile vengono sostituiti. Nell’esempio seguente, il testo immesso al prompt diventa il valore dell’INPUT variabile. Questa variabile rappresenta l’elenco degli argomenti del costrutto for. Pertanto, il testo in INPUT è suddiviso in parole o token in base allo spazio bianco.
$ cat ex1.sh #!/bin/bash# Script name: ex1.shecho "Enter some text: \c" read INPUTfor var in $INPUT do echo "var contains: $var"done
$ ./ex1.shEnter some text: I like the Bash shell. var contains: Ivar contains: likevar contains: thevar contains: Kornvar contains: shell.
Esempio 3 : Ciclo For utilizzo degli argomenti della riga di comando per specificare gli argomenti
Nell’esempio seguente, il testo immesso sulla riga di comando diventa l’elenco degli argomenti del costrutto for. Pertanto, il testo della riga di comando è suddiviso in parole o token in base allo spazio bianco.
$ cat ex2.sh#!/bin/bash# Script name: ex2.shfor var in $* do echo "command line contains: $var"done
$ ./ex2.sh I am The Geek.command line contains: Icommand line contains: amcommand line contains: Thecommand line contains: Geek.
Esempio 4 : Per ciclo Utilizzando sostituzione di comando per specificare argomenti
La sintassi per la sostituzione di comando in una shell Bash è:
for var in `cmd_sub`
Il seguente esempio utilizza l’output del comando cat come elenco di argomenti.
$ cat fruit1 apple orange banana peachkiwi
$ cat ex4.sh #!/bin/bash# Script name: ex4.shfor var in `cat fruit2` do echo "var contains: $var"done
$ ./ex4.shvar 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 fruit3Apple Orange Banana Peach Kiwi
$ cat ex5.sh #!/bin/bash# Script name: ex5.shfor var in `cat fruit3` do echo "$var"done
$ ./ex5.shApple Orange Banana Peach Kiwi
Nell’esempio precedente, i risultati non cambiano. La variabile IFS è qualsiasi spazio bianco, quindi sia un ritorno a capo che uno spazio o una scheda separano ciascun campo nel file.
Esempio 5 : Per loop usando nomi di file nella sostituzione dei comandi per specificare 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 / profilee così via), come elenco di argomenti per il ciclo for.
$ cat ex7.sh #!/bin/bash# Script name: ex7.shfor var in `ls /etc/p*`do print "var contains: $var"done
# ./x.sh var contains: /etc/passwdvar contains: /etc/passwd-var contains: /etc/printcapvar contains: /etc/profile....
Leave a Reply