J'essaie de faire quelque chose d'assez commun : Analyser l'entrée utilisateur dans un shell script. Si l'utilisateur a fourni un entier valide, le script fait une chose, et s'il n'est pas valide, il fait autre chose. Le problème est que je n'ai pas trouvé de moyen facile (et raisonnablement élégant) de faire cela - je ne veux pas avoir à le décortiquer caractère par caractère.
Je sais que cela doit être facile, mais je ne sais pas comment. Je pourrais le faire dans une douzaine de langues, mais pas en BASH !
Dans mes recherches, j'ai trouvé ceci :
Et il y a une réponse qui parle de regex, mais pour autant que je sache, c'est une fonction disponible en C (entre autres). Néanmoins, il y avait ce qui semblait être une bonne réponse, alors j'ai essayé avec grep, mais grep ne savait pas quoi en faire. J'ai essayé -P qui, sur ma machine, signifie qu'il faut le traiter comme un regexp PERL - rien. Dash E (-E) n'a pas fonctionné non plus. Et -F non plus.
Pour être clair, j'essaie quelque chose comme ça, à la recherche d'un résultat - à partir de là, je modifierai le script pour tirer parti de ce que j'obtiendrai. (En d'autres termes, je m'attendais à ce qu'une entrée non conforme ne renvoie rien alors qu'une ligne valide est répétée).
snafu=$(echo "$2" | grep -E "/^[-+]?(?:\.[0-9]+|(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/")
if [ -z "$snafu" ] ;
then
echo "Not an integer - nothing back from the grep"
else
echo "Integer."
fi
Quelqu'un pourrait-il illustrer la manière la plus simple de procéder ?
Franchement, c'est un défaut de TEST, à mon avis. Il devrait avoir un drapeau comme celui-ci
if [ -I "string" ] ;
then
echo "String is a valid integer."
else
echo "String is not a valid integer."
fi