Mettre en pause un script BASH
Bb1503
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour à tous,
j'écris un petit script bash, qui nécessite une pause, et plus précisement qui attend une réponse de l'utilisateur.
en fait, si le dossier en question n'est pas vide, un avertissement s'affiche. "Voulez vous continuer ? "
L'utilisateur doit pouvoir répondre non et sortir du script ; ou oui auquel cas le script continue son exécution.
Le problème ici est que, si je rentre "y" ou "Y",
fonctionne quand même, c'est à dire (en mode debug)
+ '[' y=N -o y=n ']'
+ exit
donc si je rentre "n" , "N", "y" ou "Y" je sors ; en revanche si je tape n'importe quelle autre lettre, on me redemande bien de retaper ma réponse !
c'est donc
auriez-vous une idée s'il vous plait ?
voici la partie du script concernée :
j'écris un petit script bash, qui nécessite une pause, et plus précisement qui attend une réponse de l'utilisateur.
en fait, si le dossier en question n'est pas vide, un avertissement s'affiche. "Voulez vous continuer ? "
L'utilisateur doit pouvoir répondre non et sortir du script ; ou oui auquel cas le script continue son exécution.
Le problème ici est que, si je rentre "y" ou "Y",
if [ "$mot"="N" -o "$mot"="n" ] ; then exit fi
fonctionne quand même, c'est à dire (en mode debug)
+ '[' y=N -o y=n ']'
+ exit
donc si je rentre "n" , "N", "y" ou "Y" je sors ; en revanche si je tape n'importe quelle autre lettre, on me redemande bien de retaper ma réponse !
c'est donc
if [ "$mot"="N" -o "$mot"="n" ]qui pose un problème et je ne vois pas pourquoi ...
auriez-vous une idée s'il vous plait ?
voici la partie du script concernée :
if [ $contenu <> 0 ] ; then echo " Attention le fichier cible n'est pas vide. Cela peut poser des problèmes quant au bon fonctionnement du script, les résultats obtenus peuvent être inattendus. " # l'utilisateur a la possibilité de stopper le script ici ou de continuer son exécution. echo " voulez vous continuez ? [Y/N] " read mot until # recommencer la boucle tant qu'il n'a pas réondu par oui ou non à la question "voulez vous continuez ? " [ "$mot" = "Y" -o "$mot" = "y" -o "$mot" = "N" -o "$mot" = "n" ] do echo " voulez vous continuez ? [Y/N] " read mot done # on peut être sorti de la boucle while pour 2 raisons, s'il a saisi oui, ou s'il a saisi non. # s'il a saisi non, on arrête l'exécution du script. if [ "$mot"="N" -o "$mot"="n" ] ; then exit fi fi
A voir également:
- Shell pause
- Classic shell - Télécharger - Personnalisation
- Imprimante en pause hp ✓ - Forum Imprimante
- Classic shell c'est quoi ✓ - Forum Windows 10
- Facebook rencontre bug une pause s'impose - Forum Facebook
- Classic shell est il sain? ✓ - Forum Windows 8 / 8.1
2 réponses
Salut,
Un exemple pour mieux expliquer...
;-))
Un exemple pour mieux expliquer...
$ cat foo.sh #! /bin/bash #set -xv while : do read -p "Voulez-vous continuer ? [Yy/Nn] " reponse case "${reponse}" in [Yy]) echo "On continue..." continue ;; [Nn]) echo "Bye bye..." break ;; *) echo "Mauvaise réponse..." continue ;; esac done echo "Merci de votre visite" exit $ ./foo.sh Voulez-vous continuer ? [Yy/Nn] O Mauvaise réponse... Voulez-vous continuer ? [Yy/Nn] o Mauvaise réponse... Voulez-vous continuer ? [Yy/Nn] Y On continue... Voulez-vous continuer ? [Yy/Nn] y On continue... Voulez-vous continuer ? [Yy/Nn] N Bye bye... Merci de votre visite $
;-))
je l'ai comprise, cependant je n'ai pas compris le commentaire #set -xv
ni la condition de ton while ; un while peu ne pas avoir de condition d'arrêt ?
[Yy]) echo "On continue..."
break
;;
[Nn]) echo "Bye bye..."
exit
;;
*) echo "Mauvaise réponse..."
continue
;;
?
La condition "while :" on aurait pu l'écrire "while true", donc tant que la condition est vraie...
Donc ici l'arrêt est déclenché par l'instruction "break".
Tu mets ce que tu veux. Mon exemple vaut juste pour la méthode, après à toi d'adapter à tes besoins ;-))
Avec ton exemple, si je saisis "y" ou "Y" la boucle continue de tourner, on redemande encore une fois si on veut continuer ... alors que je veux continuer !
C'est pour çà que je me suis permis ce "pourquoi ne pas mettre" ^^
merci pour ton aide !