2010-11-06 6 views
0

Ok J'essaie d'avoir une situation où je vérifie si un fichier existe, si c'est le cas, je donne à l'utilisateur l'option de le télécharger à nouveau - Je veux le défaut (entrez) pour être Y, je veux que Y ou y poursuive le script, je veux que N ou n quitte le script, et je veux que toutes les autres réponses retournent et re-posent la question ... mais je suis bloqué cette. Ce que j'ai fait ne fait que continuer (entrée), et échoue sur toutes les autres réponses autres que la minuscule y.Aide de script Bash avec if then else et sensibilité à la casse

Ici, il est:

if [ -f $target/$remote_backup ];then 
    read -p "This file already exists, do you still want to download? [Y/n]" decide 
    if [ -z $decide ];then 
     # if you press return it'll default to Y and continue 
     decide="Y" 
    else 
     if [ $decide != y ]; then 
     echo "Ok you said no or pressed a random button, exiting" 
     exit -1 
    fi 
fi 
fi 

Répondre

1

Essayez une boucle while:

if [ -f $target/$remote_backup ]; then 
    decide="?" 
    while [ "$decide" != "y" -a "$decide" != "n" ]; do 
     read -p "This file already exists, do you still want to download? [Y/n] " decide 
     if [ -z $decide ]; then 
      decide="y" 
     fi 
    done 
    echo Decision: $decide 
fi 
+0

Je ne pense pas que je comprenne, est-ce que le temps passe après? comme ceci ... si [-f $ target/$ remote_backup], puis while ["$ decide"! = "y" -a "$ décider"! = "n"]; do read -p "Ce fichier existe déjà, voulez-vous toujours le télécharger? [Y/n]" décidez si [-z $ decide]; alors decide = "y" fi fait – beatbreaker

+0

@beatbreaker, le 'while' va après votre premier' if'. J'ai mis à jour ma réponse avec plus de contexte. –

+0

Je peux obtenir que cela fonctionne, mais ne résout pas mon problème de cas – beatbreaker

4

La structure habituelle à utiliser pour cela est case.

case "$decide" in 
    y|Y|'') echo "yes" ;; 
    n|N) echo "no" ;; 
    *) echo "boo" ;; 
esac 
+0

Alors ça va après la lecture? Je ne vais pas faire écho Je ne pense pas, ou dois-je dans cette situation? puis-je quitter -1 s'ils appuient sur n et comment puis-je faire une boucle s'ils répondent *? – beatbreaker

+0

Mettez-le dans une boucle. Sur N, 'exit'. Sur Y, 'break'. –

+0

Que faire si *? – beatbreaker

Questions connexes