[BASH#WHILE] Condition : aucun mots [RÉSOLU]

Applications multimedia / jeux
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

[BASH#WHILE] Condition : aucun mots [RÉSOLU]

Message 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 !
Dernière modification par aminnairi le mer. 23 déc. 2015, 21:19, modifié 1 fois.
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [BASH#WHILE] Condition : aucun mots

Message 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...
«The following statement is not true. The previous statement is true.» :nage:
Moviuro
Elfe
Messages : 765
Inscription : dim. 17 juin 2012, 22:49

Re: [BASH#WHILE] Condition : aucun mots

Message par Moviuro »

plop,

tu peux tester if ((variable)); then ...; else ...; fi. Ça plante avec violence si "variable" n'est pas un nombre entier
psycho : Latitude E6430 ; BTRFS over LUKS, UEFI & secureboot
schizo : Acer 8942G ; KDE 4, BTRFS over LUKS ; W7 (prend la poussière)
toxo : i5-6600K, bspwm, VM W10 en PCI-passthrough
deadman : Lenovo Thinkcenter, OpenBSD 6.0-stable
popho.be : Kimsufi KS-3, FreeBSD 11.0
Loi de Murphy : Le jour où tu as besoin d'une backup, tu te dis que tu aurais dû en mettre en place
Venez sur IRC en plus du forum !
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [BASH#WHILE] Condition : aucun mots

Message 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"
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Moviuro
Elfe
Messages : 765
Inscription : dim. 17 juin 2012, 22:49

Re: [BASH#WHILE] Condition : aucun mots [RÉSOLU]

Message 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.
psycho : Latitude E6430 ; BTRFS over LUKS, UEFI & secureboot
schizo : Acer 8942G ; KDE 4, BTRFS over LUKS ; W7 (prend la poussière)
toxo : i5-6600K, bspwm, VM W10 en PCI-passthrough
deadman : Lenovo Thinkcenter, OpenBSD 6.0-stable
popho.be : Kimsufi KS-3, FreeBSD 11.0
Loi de Murphy : Le jour où tu as besoin d'une backup, tu te dis que tu aurais dû en mettre en place
Venez sur IRC en plus du forum !
Répondre