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
2 réponses
-
Salut,
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 $
;-))-
-
-
-
-
Oui bien sur ^^" mais je pensais que c'était "comme ca et pas autrement".
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 !
-
-
salut,
ce qui se passe, étant donné que tu ne mets pas d'espaces autour du =, le test se fait sur le texte, or le texte existe, donc le test est vrai. Mais ça ne teste pas l'égalité de $mot et de N ou n.