Probleme boucle
Benjamin
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Voici mon code de base :
Je cherche à faire en sorte de boucler cet algo pour que si l'utilisateur ne rentre pas une note valide il soit dans une boucle qui lui oblige.
J'ai commencé des "pistes"
Malheureusement j'ai 2 questions.
Peut-on mettre une condition pour passer outre la boucle si un chiffre entre 0 et 20 est rentré.
Comment mettre une sorte d'intervalle un peu à la {0..20} mais pour dire "si tu n'est pas un entier entre 0 et 20 tu passes dans la boucle".
Voici mon code de base :
#!/bin/bash note=$1 if [[ -z $note ]]; then echo "Error" elif [[ $1 -eq "${note##[0-9]*}" ]]; then echo "Error2" elif [ 20 -lt "$note" ]; then echo "Vous ne pouvez pas avoir au dessus de 20" elif [ 18 -le "$note" ]; then echo "Parfait" elif [ 16 -le "$note" ]; then echo "Très bien" elif [ 14 -le "$note" ]; then echo "Bien" elif [ 12 -le "$note" ]; then echo "Assez bien" elif [ "$note" -lt 10 ] && [ "$note" -ge 0 ]; then echo "Insuffisant" elif [ "$note" -lt 0 ]; then echo "Vous ne pouvez pas avoir en dessous de 0" fi
Je cherche à faire en sorte de boucler cet algo pour que si l'utilisateur ne rentre pas une note valide il soit dans une boucle qui lui oblige.
J'ai commencé des "pistes"
note=$1 while [[ -z $note ]] || [[ $1 -eq "${note##[0-9]*}" ]] do echo -e "Saisir entre 0 et 20 : \c" read note done exit 0
Malheureusement j'ai 2 questions.
Peut-on mettre une condition pour passer outre la boucle si un chiffre entre 0 et 20 est rentré.
Comment mettre une sorte d'intervalle un peu à la {0..20} mais pour dire "si tu n'est pas un entier entre 0 et 20 tu passes dans la boucle".
Configuration: Windows / Chrome 78.0.3904.87
1 réponse
Salut,
Les conditions
Voilà un exemple adapter à ton cas :

Et le code bien sûr :
;-))
Les conditions
while,
untilet
for, peuvent utiliser les fonctions
breaket
continuedans leur boucle.
Voilà un exemple adapter à ton cas :

Et le code bien sûr :
#!/bin/bash #set -xv clear regex="^[0-2]{,1}[0-9]{1}$" note=$1 while [[ -z $note ]] || [[ ! ${note} =~ ${regex} ]] || [[ ${note} -gt 20 ]] do read -p "Saisir un chiffre : " note continue done echo "Ben voilà ;-)" exit 0
;-))
J'ai réussi à faire ce que je voulais.
Néanmoins c'est pas parfait car les caractères spéciaux font buger le programme.