Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

pour : Forme de coquille traditionnelle

L'ouverture a en la syntaxe de la commande est :

en variable [dans des mots] ; faire

commandes

fait

variable est le nom d'une variable qui s'incrémentera lors de l'exécution de la boucle, des mots est une liste facultative d'éléments qui seront assignés séquentiellement à variableet commandes sont les commandes qui doivent être exécutées à chaque itération de la boucle.

La en La commande est utile sur la ligne de commande. Nous pouvons facilement démontrer comment cela fonctionne :



[moi@linuxbox ~]$ pour i dans ABCD ; faire écho $i; terminé

A B C D

[moi@linuxbox ~]$ pour i dans ABCD ; faire écho $i; terminé

A B C D


Dans cet exemple, en se voit attribuer une liste de quatre mots : « A », « B », « C » et « D ». Avec une liste de quatre mots, la boucle est exécutée quatre fois. A chaque exécution de la boucle, un mot est affecté à la variable i. A l'intérieur de la boucle, nous avons un echo commande qui affiche la valeur de i pour montrer le devoir. Comme avec le tout en ainsi que jusqu'à boucles, le fait mot-clé ferme la boucle.


La fonctionnalité vraiment puissante de en est le nombre de façons intéressantes de créer la liste de mots. Par exemple, via l'expansion de l'accolade :



[moi@linuxbox ~]$ pour i dans {A..D} ; faire écho $i; terminé

A B C D

[moi@linuxbox ~]$ pour i dans {A..D} ; faire écho $i; terminé

A B C D


ou extension du chemin d'accès :



[moi@linuxbox ~]$ pour i dans les distributions*.txt ; faire écho $i; terminé

distros-by-date.txt dates-distros.txt noms-clés-distros.txt clés-distros-vernums.txt noms-distros.txt distros.txt

distributions-vernums.txt distributions-versions.txt

[moi@linuxbox ~]$ pour i dans les distributions*.txt ; faire écho $i; terminé

distros-by-date.txt dates-distros.txt noms-clés-distros.txt clés-distros-vernums.txt noms-distros.txt distros.txt

distributions-vernums.txt distributions-versions.txt


ou substitution de commande :



#! / Bin / bash

# mot-long : recherche la chaîne la plus longue dans un fichier while [[ -n $1 ]]; faire

si [[ -r $1 ]] ; alors max_word= max_len=0

pour i dans $(chaînes $1); do len=$(echo -n $i | wc -c)

if (( longueur > longueur_max )); alors max_len=$len max_word=$i

fi

fait

echo "$1 : '$max_word' (caractères $max_len)"

décalage de fi

fait

#! / Bin / bash

# mot-long : recherche la chaîne la plus longue dans un fichier while [[ -n $1 ]]; faire

si [[ -r $1 ]] ; alors max_word= max_len=0

pour i dans $(chaînes $1); do len=$(echo -n $i | wc -c)

if (( longueur > longueur_max )); alors max_len=$len max_word=$i

fi

fait

echo "$1 : '$max_word' (caractères $max_len)"

décalage de fi

fait

pour : Forme de coquille traditionnelle


Dans cet exemple, nous recherchons la chaîne la plus longue trouvée dans un fichier. Lorsqu'on lui donne un ou plusieurs noms de fichiers sur la ligne de commande, ce programme utilise le instruments à cordes programme (qui est inclus dans le package GNU binutils) pour générer une liste de « mots » de texte lisibles dans chaque fichier. Les en loop traite chaque mot à tour de rôle et détermine si le mot actuel est le plus long trouvé jusqu'à présent. Lorsque la boucle se termine, le mot le plus long est affiché.

Si l'optionnel in des mots partie de la en la commande est omise, en par défaut le traitement des paramètres de position. Nous allons modifier notre mot le plus long script pour utiliser cette méthode :



#! / Bin / bash

# mot-long2 : recherche la chaîne la plus longue dans un fichier pour i ; faire

si [[ -r $i ]] ; alors max_word= max_len=0

pour j dans $(chaînes $i); do len=$(echo -n $j | wc -c)

if (( longueur > longueur_max )); alors max_len=$len max_word=$j

fi

fait

echo "$i: '$max_word' (caractères $max_len)"

fi fait

#! / Bin / bash

# mot-long2 : recherche la chaîne la plus longue dans un fichier pour i ; faire

si [[ -r $i ]] ; alors max_word= max_len=0

pour j dans $(chaînes $i); do len=$(echo -n $j | wc -c)

if (( longueur > longueur_max )); alors max_len=$len max_word=$j

fi

fait

echo "$i: '$max_word' (caractères $max_len)"

fi fait


image

Comme nous pouvons le voir, nous avons modifié la boucle la plus externe pour utiliser en au lieu de tout en. En omettant la liste de mots dans le en commande, les paramètres positionnels sont utilisés à la place. Dans la boucle, les instances précédentes de la variable i ont été remplacés par la variable j. L'utilisation de décalage a également été éliminé.


Pourquoi je?

Vous avez peut-être remarqué que la variable i a été choisi pour chacun des en exemples de boucle ci-dessus. Pourquoi? Aucune raison précise en fait, à part la tradition. La variable utilisée avec en peut être n'importe quelle variable valide, mais i est la plus courante, suivie de j ainsi que k.



image

La base de cette tradition vient du langage de programmation Fortran. En Fortran, les variables non déclarées commençant par les lettres I, J, K, L et M sont automatiquement saisies comme des entiers, tandis que les variables commençant par n'importe quelle autre lettre sont saisies comme réelles (nombres avec fractions décimales). Ce comportement a conduit les programmeurs à utiliser les variables I, J et K pour les variables de boucle, car il était moins difficile de les utiliser lorsqu'une variable temporaire (comme le sont souvent les variables de boucle) était nécessaire.

Cela a également conduit au mot d'esprit suivant basé sur Fortran : « DIEU est réel, à moins qu'il ne soit déclaré entier. »


Meilleur système d'exploitation Cloud Computing chez OnWorks :