2014-07-22 5 views
0

De toute façon, pour revenir au début de l'instruction if si l'utilisateur ne fournit pas une entrée correcte dans bash et sh?Goto début de if instruction?

if [ "$INPUT" = "no" ]; then 
    Do something 
elif [ "$INPUT" = "yes" ]; then 
    Do something else 
else 
    echo "Input not understood" 
    Go back to beginning of if statement 
fi 

Répondre

2

Vous devez utiliser une boucle; bash n'a pas une instruction goto.

while true; do 
    # set the value of INPUT here 
    if [ "$INPUT" = "no" ]; then 
    Do something 
    elif [ "$INPUT" = "yes" ]; then 
    Do something else 
    else 
    echo "Input not understood" 
    continue 
    fi 
    break 
done 

Dans cette boucle « infinie », nous utilisons la déclaration continue dans la clause else pour revenir au sommet de la boucle, où nous faisons quelque chose pour obtenir une nouvelle valeur de INPUT. Si nous n'exécutons pas la clause else, nous obtenons l'instruction break, qui ferme la boucle.

+0

Duh ... Merci – Atomiklan

2

Cela s'appelle une 'boucle'. Vous avez for, while (et until) boucles dans shell. Utilisez-en un. Vous avez également break pour quitter les boucles et continue pour passer à l'itération suivante.

Dans ce cas, vous ne voulez pas passer à l'instruction if; vous devez obtenir une nouvelle entrée:

while read -r INPUT 
do 
    if [ "$INPUT" = "no" ]; then 
     Do something 
     break 
    elif [ "$INPUT" = "yes" ]; then 
     Do something else 
     break 
    else 
     echo "Input not understood" 
    fi 
done