3 votes

Shell script qui demande à l'utilisateur de continuer par un y/n

J'ai un shell script que je veux demander à l'utilisateur s'il veut continuer. S'il tape 'n' et appuie sur entrée, le script sortira.

S'ils appuient sur 'y' et entrent, il continuera à fonctionner. J'ai ceci en haut de mon script mais il continue indépendamment de ce que je tape.

Qu'est-ce que je fais de mal ?

goon=
while [ -z $goon ]
do
    echo -n 'Do you want to continue? '
    read goon
    if [[ $goon = 'n' ]]
    then
        break
    fi
    goon=
done

6voto

ghostdog74 Points 86060

Utilisez une boucle infinie et case/esac comme ceci :

while true
do
    read -r -p 'Do you want to continue? ' choice
    case "$choice" in
      n|N) break;;
      y|Y) echo 'Do your stuff here';;
      *) echo 'Response not valid';;
    esac
done

4voto

Jumipo Points 206

L'instruction "break" vous permet de sortir de la boucle "while".

Si vous voulez quitter le script, vous devez utiliser 'exit'.

2voto

Pointy Points 172438

Cela fonctionne parfaitement bien pour moi si je me débarrasse des crochets doublés :

if [ $goon = 'n' ]

1voto

Sorpigal Points 10412

Plutôt que d'utiliser echo + read, il suffit d'utiliser read -p

read -p  "Do you want to continue? " goon

0voto

clyfe Points 15388

Voici un exemple fonctionnel ( == au lieu de = pour les tests d'égalité)

goon=
while [ -z $goon ]
do
    echo -n 'Do you want to continue? '
    read goon
    if [[ $goon == 'n' ]]
    then
        break
    fi
    goon=
done

Chose étrange, l'original fonctionne bien pour moi aussi ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X