<Précédent | Table des matières | Suivant>
tout en
Bash peut exprimer une idée similaire. Imaginons que nous souhaitions afficher cinq nombres séquentiellement.
ordre initial de un à cinq. bash le script pourrait être construit comme suit :
#! / Bin / bash
# while-count : affiche une série de nombres count=1
tandis que [[ $count -le 5 ]]; faire echo $count count=$((count + 1))
fait
echo "Terminé."
#! / Bin / bash
# while-count : affiche une série de nombres count=1
tandis que [[ $count -le 5 ]]; faire echo $count count=$((count + 1))
fait
echo "Terminé."
Une fois exécuté, ce script affiche les éléments suivants :
[moi@linuxbox ~]$ nombre de temps
1
2
3
4
5
Fini.
[moi@linuxbox ~]$ nombre de temps
1
2
3
4
5
Fini.
La syntaxe du tout en la commande est:
tout en commandes; fais commandes; terminé
J'aime if, tout en Évalue l'état de sortie d'une liste de commandes. Tant que l'état de sortie est nul, les commandes de la boucle sont exécutées. Dans le script ci-dessus, la variable compter est créé et se voit attribuer une valeur initiale de 1. Le tout en la commande évalue l'état de sortie du [[]] commande composée. Tant que le [[]] Si la commande renvoie un état de sortie nul, les commandes de la boucle sont exécutées. À la fin de chaque cycle, [[]] La commande est répétée. Après cinq itérations de la boucle, la valeur de compter est passé à 6, le [[]] La commande ne renvoie plus un état de sortie nul et la boucle se termine. Le programme continue avec l'instruction suivante.
Nous pouvons utiliser un boucle tout en pour améliorer le lire-menu programme du chapitre précédent :
#! / Bin / bash
# while-menu : un programme d'informations système piloté par menu
#! / Bin / bash
# while-menu : un programme d'informations système piloté par menu
RETARD=3 # Nombre de secondes pour afficher les résultats
tandis que [[ $REPLY != 0 ]]; faire
clair
chat <<- _EOF_
Veuillez sélectionner:
1. Afficher les informations système
2. Afficher l'espace disque
3. Afficher l'utilisation de l'espace domestique
0. Quitter
_EOF_
read -p "Entrer la sélection [0-3] > "
si [[ $REPLY =~ ^[0-3]$ ]] ; alors si [[ $REPLY == 1 ]]; alors
echo "Nom d'hôte : $HOSTNAME"
dormir $DÉLAI
fi
if [[ $REPLY == 2 ]]; puis df -h
dormir $DÉLAI
fi
if [[ $REPLY == 3 ]]; alors
if [[ $(id -u) -eq 0 ]] ; alors
echo "Utilisation de l'espace d'accueil (tous les utilisateurs)" du -sh /home/*
d'autre
echo "Utilisation de l'espace domestique ($USER)" du -sh $HOME
fi
dormir $DÉLAI
fi
d'autre
echo "Entrée invalide."
dormir $DÉLAI
fi
fait
echo "Programme terminé."
RETARD=3 # Nombre de secondes pour afficher les résultats
tandis que [[ $REPLY != 0 ]]; faire
clair
chat <<- _EOF_
Veuillez sélectionner:
1. Afficher les informations système
2. Afficher l'espace disque
3. Afficher l'utilisation de l'espace domestique
0. Quitter
_EOF_
read -p "Entrer la sélection [0-3] > "
si [[ $REPLY =~ ^[0-3]$ ]] ; alors si [[ $REPLY == 1 ]]; alors
echo "Nom d'hôte : $HOSTNAME"
dormir $DÉLAI
fi
if [[ $REPLY == 2 ]]; puis df -h
dormir $DÉLAI
fi
if [[ $REPLY == 3 ]]; alors
if [[ $(id -u) -eq 0 ]] ; alors
echo "Utilisation de l'espace d'accueil (tous les utilisateurs)" du -sh /home/*
d'autre
echo "Utilisation de l'espace domestique ($USER)" du -sh $HOME
fi
dormir $DÉLAI
fi
d'autre
echo "Entrée invalide."
dormir $DÉLAI
fi
fait
echo "Programme terminé."
En enfermant le menu dans une boucle while, le programme peut répéter l'affichage du menu après chaque sélection. La boucle se poursuit tant que RÉPONDRE n'est pas égal à « 0 » et le menu s'affiche à nouveau, offrant à l'utilisateur la possibilité d'effectuer une nouvelle sélection. À la fin de chaque action, un sleep La commande est exécutée, le programme marque une pause de quelques secondes pour permettre de visualiser les résultats de la sélection avant que l'écran ne soit effacé et que le menu ne soit réaffiché. RÉPONDRE est égal à « 0 », indiquant la sélection « quitter »,
la boucle se termine et l'exécution continue avec la ligne suivante fait.