Probleme boucle
Benjamin
-
zipe31 Messages postés 38797 Statut Contributeur -
zipe31 Messages postés 38797 Statut Contributeur -
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
A voir également:
- Probleme boucle
- Smart tv qui s'allume et s'éteint en boucle - Forum Téléviseurs
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Vlc lecture en boucle ✓ - Forum Lecteurs et supports vidéo
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.
#!/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 case "${note}" in 1[8,9]) echo "Parfait";; 1[6,7]) echo "Très bien";; 1[4,5]) echo "Bien";; 1[2,3]) echo "Assez bien";; 1[0,1]) echo "Passable";; [0-9]) echo "Insuffisant";; *) echo "Résultat inexact";; esac exit 0