2009-12-14 6 views
1

Comment utiliser des instructions de boucle dans un script shell Unix, par exemple while, for do while. J'utilise le serveur putty.Comment utiliser des instructions de boucles dans un script shell Unix

+0

Vous devez expliquer plus. Quel genre de boucles? Des boucles qui comptent pour quelque chose? Boucle sur les noms de fichiers? Looping sur une liste de choses? –

+0

La partie serveur du putty est-elle vraiment pertinente? – Tom

+0

tous les livres sur shell scripting disponibles sur le marché et internet ont un chapitre dédié à loops.please mis quelques efforts pour les étudier avant de commencer la programmation sous unix. – Vijay

Répondre

1

pour: Itérer sur une liste.

$for i in `cat some_file | grep pattern`;do echo $i;done 

alors que la boucle ressemble beaucoup à celle de C. Si vous n'utilisez que la ligne de commande, vous pouvez utiliser perl, mais j'imagine que c'est de la triche.

$perl -e '$i=0;while ($i < 10){print $i;$i++;}' 

données Plus

http://www.freeos.com/guides/lsst/

+0

premier est mauvais exemple d'une utilisation inutile de LS. for i in *; echo $ i; done – ghostdog74

+0

second exemple: i = 'expr $ i + 1' <--- pas besoin d'appeler externe expr. $ ((i + 1)) ou $ ((i ++)) – ghostdog74

+0

J'ai changé le ls pour autre chose. C'est juste un exemple pour montrer la structure de la boucle for. – Tom

1
#!/bin/sh 
items=(item1 item2 item3) 

len=${#items[*]} 

i=0 
while [ $i -lt $len ]; do 
    echo ${items[$i]} 
    let i++ 
done 

exit 0 
+0

Strictement, cela nécessite un bash plutôt qu'une coquille de Bourne; sur de nombreux systèmes modernes, il n'y a pas de shell Bourne et/bin/sh est un lien vers/bin/bash. –

0

Outre le 'pour' et 'while' boucles mentionnées par Tom, il y a (dans le classique shells Bourne et Korn au moins, mais aussi dans Bash sur Mac OS X et probablement ailleurs aussi) une until boucle:

until [ -f /tmp/sentry.file ] 
do 
    sleep 3 
done 

Cette boucle se termine lorsque t La commande testée réussit, contrairement à la boucle 'while' qui se termine lorsque la commande testée échoue.

Notez également que vous pouvez tester une séquence de commandes; la dernière commande est celle qui compte:

while x=$(ls); [ -n "$x" ] 
do 
    echo $x 
done 

Ceci continue à répercuter tous les fichiers dans le répertoire jusqu'à ce qu'ils soient tous supprimés.

0

à l'OP, pour itérer sur les fichiers

for file in * 
do 
echo "$file" 
done 

pour générer des compteurs

for c in {0..10} 
do 
echo $c 
done 
-1

à itérer via un fichier dans KSH

en lecture en ligne; faire

echo "ligne du fichier $ ligne"

fait < filename.txt

-1
echo "sample while loop" 
i=0; 
while [ $i -le 10 ] 
do 
echo $i 
((i++)) 
done 
+0

boucle simple, il imprime jusqu'à 10. son fonctionnement –

0
using for loop 
max=10 
for ((i=0; i<=$max; i++)); 
do 
echo $i 
done 
Questions connexes