Les structures de contrôle |
![]() |
![]() |
La commande awk |
Les boucles (while, for, do-while)
Sauts controlés (break, continue, next, exit)
Parmi les structures de contrôle, on distingue les décisions (if, else), les boucles (while, for, do-while, loop) et les sauts (next, exit, continue, break).
La syntaxe est la suivante:
if (condition) | si la condition est satisfaite (vraie) | |
instruction1 | on exécute l'instruction 1 | |
else | sinon | |
instruction2 | on exécute l'instruction 2 |
Si vous avez une suite d'instructions à exécuter, vous devez les regrouper entre deux accolades. Exemples:
awk ' BEGIN{print"test de l'absence de mot de passe";FS=":"} | |||
NF==7 { | pour toutes les lignes contenant 7 champs | ||
if ($2=="") | si le deuxième champ est vide (correspond au mot de passe crypté) | ||
{ print $1 "n'a pas de mot de passe"} | on affiche le nom de l'utilisateur ($1=login) qui n'a pas de mot de passe | ||
else | sinon | ||
{print $1 " a un mot de passe"} | on affiche le nom de l'utilisateur possédant un mot de passe | ||
}END{print"C'est fini") ' /etc/passwd |
while, for et do-while sont issus du langage de programmation C. La syntaxe de while est la suivante:
while (condition) | tant que la condition est satisfaire (vraie) | |
instruction | on exécute l'instruction |
Exemple:
awk ' BEGIN{print"affichage de tous les champs de passwd";FS=":"}{ | |||
i=1 | initialisation du compteur à 1 (on commence par le champ 1) | ||
while (i=<NF) | tant qu'on n'est pas en fin de ligne | ||
{ print $i | on affiche le champ | ||
i++ | incrémentation du compteur pour passer d'un champ au suivant | ||
} | |||
}END{print"C'est fini") ' /etc/passwd |
La syntaxe de for est la suivante:
for (instruction de départ; condition; instruction d'incrémentation) | On part d'une instruction de départ, on incrémente | |
instruction | on exécute l'instruction jusqu'à que la condition soit satisfaite |
Exemple:
awk ' BEGIN{print"affichage de tous les champs de passwd";FS=":"}{ | |||
for (i=1;i=><NF;i++) | initialisation du compteur à 1, on incrémente le compteur jusqu'à ce qu'on atteigne NF (fin de la ligne) | ||
{ print $i } | on affiche le champ tant que la condition n'est pas satisfaite | ||
}END{print"C'est fini") ' /etc/passwd |
Avec for on peut travailler avec des tableaux. Soit le tableau suivant: tab[1]="patate", tab[2]="courgette", tab[3]="poivron". Pour afficher le contenu de chacun des éléments du tableau on écrira:
for (index in tab) | |
{ | |
print "legume :" tab[index] | |
} |
La syntaxe de do-while est la suivante:
do | ||
{instructions} | on exécute les instructions | |
while (condition) | jusqu'à que la condition soit satisfaite |
La différence avec while, est qu'on est sûr que l'instruction est exécutée au moins une fois.
break permet de sortir d'une boucle, la syntaxe est la suivante:
for (;;;) | boucle infinie | |
{instructions | on exécute les instructions | |
if (condition) break | si la condition est satisfaite on sort de la boucle | |
instructions} |
Alors que break permet de sortir d'une boucle, continue force un nouveau passage dans une boucle.
next permet d'interrompre le traitrement sur la ligne courante et de passer à la ligne suivante (enregistrement suivant).
exit permet d'abandonner la commande awk, les instructions suivant END sont exécutées (s'il y en a).