Page 1 sur 1
[BASH#WHILE] Condition : aucun mots [RÉSOLU]
Publié : mer. 23 déc. 2015, 17:17
par aminnairi
Bonjour,
J'ai un script qui me permet de calculer des gains boursiers en fonctions de plusieurs paramètres.
À un moment donné, l'utilisateur doit rentrer une valeur (chiffres). Mais j'aimerais que le script soit restrictif et ne permette que la saisie de chiffres (et rien d'autre, en plus de mes conditions déjà présentes).
Voici une partie de ce script :
Code : Tout sélectionner
while [[ $ACHAT -le "0" || -z $ACHAT ]]; do
clear
read -p "Veuillez rentrer le cours d'achat : " ACHAT
done
Comme on peut le voir, j'ai mis une condition "inférieur ou égale à zero" et "vide". Est-ce qu'il existe une condition "aucun mot" ou "seulement des charactères alphanumériques" ?
Merci beaucoup !
Re: [BASH#WHILE] Condition : aucun mots
Publié : mer. 23 déc. 2015, 18:36
par FoolEcho
Bonsoir,
Pas mal de méthodes pour ça...
Au plus simple, tu peux tester la chaîne saisie par rapport à une expression de type [:digit:]
, ou contre une expression régulière plus ou moins complexe (tester (0-9) ou mieux a priori: exclure tout pattern comprenant (a-Z), tabulations et autres, etc.), selon si tu autorises ou non les points ou virgules...
Re: [BASH#WHILE] Condition : aucun mots
Publié : mer. 23 déc. 2015, 20:23
par Moviuro
plop,
tu peux tester if ((variable)); then ...; else ...; fi
. Ça plante avec violence si "variable" n'est pas un nombre entier
Re: [BASH#WHILE] Condition : aucun mots
Publié : mer. 23 déc. 2015, 20:58
par aminnairi
Tout d'abord merci pour vos réponses ! Ça fonctionne plutôt bien avec (($ACHAT)). Au moins ça me sauve quelques kilo-octets sur le fichier. Je connaissais pas du tout je savais juste qu'on pouvait faire varier les option à l'intérieur..
Pas moyen d'empêcher plusieurs mots sinon ? Parce que taper archlinux ça fonctionne bien (comprendre mon while refait un tour) mais quand je tape j'aime archlinux ben il passe à la suite héhé... Bon après j'en demande sûrement beaucoup trop au script mais ça peut être sympa à faire !
EDIT : résolu en remplaçant par
Code : Tout sélectionner
while ! [[ $ACHAT =~ ^[0-9]+$ && $ACHAT -gt "0" ]]; do
clear
read -p "Veuillez rentrer le cours d'achat : " ACHAT
done
Taper "archlinux" renvoi au read, tout comme "j'aime archlinux mais un peu moins BSD" et "-23.342"
Re: [BASH#WHILE] Condition : aucun mots [RÉSOLU]
Publié : mer. 23 déc. 2015, 21:29
par Moviuro
tu ferais aussi bien de remplacer $ACHAT par "$achat" (les variables toutes en majuscules sont réservées à l'usage global, comme "$TERM" ou "$SSH_SESSION") et les guillemets pour éviter le word-splitting.
Donne ton script à
http://shellcheck.net pour tout vérifier.