Cette question a déjà une réponse ici:
Je veux mettre un rapide "êtes-vous sûr?" invite à confirmer en haut d'un script bash potentiellement dangereux, quelle est la meilleure façon de le faire?
Cette question a déjà une réponse ici:
Je veux mettre un rapide "êtes-vous sûr?" invite à confirmer en haut d'un script bash potentiellement dangereux, quelle est la meilleure façon de le faire?
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]
then
# do dangerous stuff
fi
modifier:
J'ai incorporé levislevis85la suggestion de (merci!) et a ajouté le -n
option à read
accepter un personnage sans avoir à appuyer sur Entrer. Vous pouvez utiliser l'un ou les deux.
En outre, la forme négative peut ressembler à ceci:
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell
fi
Cependant, comme Erich l'a fait remarquer, dans certaines circonstances, comme une erreur de syntaxe causée par l'exécution du script dans le mauvais shell, la forme annulée pourrait permettre au script de continuer vers les "choses dangereuses". Le mode de défaillance devrait favoriser le résultat le plus sûr, de sorte que seul le premier, non annulé if
Devrait être utilisé.
cas d'utilisation / esac.
read -p "Continue (y/n)?" choice
case "$choice" in
y|Y ) echo "yes";;
n|N ) echo "no";;
* ) echo "invalid";;
esac
avantage:
De cette façon, vous obtenez 'y' 'oui' ou 'Enter'
read -r -p "Are you sure? [Y/n]" response
response=${response,,} # tolower
if [[ $response =~ ^(yes|y| ) ]] || [[ -z $response ]]; then
your-action-here
fi
Si vous utilisez zsh, essayez ceci:
read "response?Are you sure ? [Y/n] "
response=${response:l} #tolower
if [[ $response =~ ^(yes|y| ) ]] || [[ -z $response ]]; then
your-action-here
fi
Essaie le read
shell intégré:
read -p "Continue (y/n)?" CONT
if [ "$CONT" = "y" ]; then
echo "yaaa";
else
echo "booo";
fi
Voici la fonction que j'utilise:
function ask_yes_or_no() {
read -p "$1 ([y]es or [N]o): "
case $(echo $REPLY | tr '[A-Z]' '[a-z]') in
y|yes) echo "yes" ;;
*) echo "no" ;;
esac
}
Et un exemple l'utilisant:
if [[ "no" == $(ask_yes_or_no "Are you sure?") || \
"no" == $(ask_yes_or_no "Are you *really* sure?") ]]
then
echo "Skipped."
exit 0
fi
# Do something really dangerous...
J'espère que tu aimes,
À votre santé!
Ce que j'ai trouvé ailleurs, y a-t-il une meilleure version possible?
read -p "Are you sure you wish to continue?"
if [ "$REPLY" != "yes" ]; then
exit
fi
[[ -f ./${sname} ]] && read -p "File exists. Are you sure? " -n 1
[[ ! $REPLY =~ ^[Yy]$ ]] && return 1
utilisé dans une fonction pour rechercher un fichier existant et une invite avant de remplacer.
#!/bin/bash
echo Please, enter your name
read NAME
echo "Hi $NAME!"
if [ "x$NAME" = "xyes" ] ; then
# do something
fi
Je suis un script court à lire dans bash et à renvoyer les résultats.
qnd: utiliser
read VARNAME
echo $VARNAME
pour une réponse à une ligne sans prise en charge de readline. Ensuite, testez $ VARNAME comme vous le souhaitez.
echo are you sure?
read x
if [ "$x" = "yes" ]
then
# do the dangerous stuff
fi