Comment pouvez-vous exécuter une commande en bash jusqu’à la réussite

J’ai un script et je veux demander à l’utilisateur des informations, le script ne peut pas continuer jusqu’à ce que l’utilisateur remplisse ces informations. Ce qui suit est ma tentative de mettre une commande dans une boucle pour y parvenir, mais cela ne fonctionne pas pour une raison quelconque.

echo "Please change password" while passwd do echo "Try again" done 

J’ai essayé de nombreuses variantes de la boucle while:

 while `passwd` while [[ "`passwd`" -gt 0 ]] while [ `passwd` -ne 0 ]] # ... And much more 

Mais je n’arrive pas à le faire fonctionner.

 until passwd do echo "Try again" done 

Vous devez tester $? à la place, qui est le statut de sortie de la commande précédente. passwd ferme avec 0 si tout fonctionnait bien, et non nul si le changement de mot de passe a échoué (mot de passe incorrect, incompatibilité de mot de passe, etc.)

 passwd while [ $? -ne 0 ]; do passwd done 

Avec votre version backtick, vous comparez la sortie de passwd, ce qui pourrait être des choses comme Enter password et confirm password et autres.

Pour développer la réponse de @Marc B,

 $ passwd $ while [ $? -ne 0 ]; do !!; done 

Est-ce une bonne façon de faire la même chose qui n’est pas spécifique à la commande.

 while [ -n $(passwd) ]; do echo "Try again"; done; 

vous pouvez utiliser une boucle à l’infini

 while true do read -p "Enter password" passwd case "$passwd" in  ) break;; esac done