Je réalise une sorte de jeu dans lequel un script pose une série de questions et d'énigmes auxquelles répondre.
Idéalement, je souhaite que l'utilisateur ait un nombre illimité de tentatives, mais un maximum de 300 secondes pour donner la bonne réponse, sans quoi ça passe à la suite.
Le read -t 300 ne me convient pas, car le compteur se reset à chaque tentative de l'utilisateur.
J'ai essayé de manipuler la variable SECONDS, mais la condition if $SECONDS > 300 ne se vérifie pas si l'utilisateur ne réalise pas une tentative.
Je me suis dit que je pouvais avoir un script main qui appellerait différents scripts contenant chacun une énigme avec la commande timeout, mais ça ne fonctionne pas : Le script est appelé correctement, il fait sa demande de prompt de la bonne réponse -> mais quelque soit la réponse donnée, le script "freeze" et impossible de faire quoi que ce soit jusqu'à la fin du timeout (cf capture)
ganswer="/backup/startup/bootloader"
while [ "$tanswer" != "$ganswer" ]; do
read -p "Emplacement du chargeur d'amorcage: " tanswer
done
Sachant que le fichier epreuve1 fonctionne indépendamment de main.test
Bon du coup je ne sais pas quoi faire, mis à part éventuellement me résigner à laisser une tentative maximum pour l'utilisateur. J'ai regardé sur internet les scripts de 50 lignes sans pour autant arriver à les faire fonctionner.
- vérifier que delai est strictement supérieur à 0
si les vérifications échouent (réponse fausse (condition de la boucle while) et temps écoulé) un message d'erreur est affiché sur la sortie d'erreur et on sort de la boucle while.
dans ton script,
es guillemets sont inutiles dans les évaluations arithmétiques.
la première assignation arithmétique est d'ailleurs inutile : timer=20 fonctionne aussi bien en bash, on peut attribuer le type numérique à cette variable : declare -i timer=20
!= est un opérateur lexical, il vaut mieux utiliser -ne, -gt... cf. help test
== ne devrait n'être utilisé que là où il a du sens : entre crochets doubles.
ensuite
if test "$v" != "$w" # faux
then
: ...
else # vrai, donc
: ...
fi
- Edité par dantonq 28 juin 2021 à 9:28:32
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Oke ça marche, j'adapterai en fonction, merci beaucoup pour tes explications
- Edité par Hibiscae 28 juin 2021 à 13:18:30
Script bash - demande de prompt avec temps imparti
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique