if [ "${variable//[0-9]/0}" -eq 0 ] then echo "numerique -> OK" else echo "pas num -> PAS OK" fi
$ uptime 19:28:06 up 12 days, 20:46, 2 users, load average: 213.96, 212.37, 208.44
C'est amusant car ce problème fait partie d'un des TP de mon cours.Citation
mickpiet
Bonjour, j'ai un script a faire et je voudrais
savoir comment on peut faire pour n'autoriser que
la saisie de nombre et renvoyer un message
d'erreur si on saisie une chaine de caractere (de
lettres). Merci
@++
expr $variable + 0 1>/dev/null 2>&1 if test $? -lt 2 then echo "numerique -> OK" else echo "pas num -> PAS OK" fi
numeric() { expr $1 + 0 1>/dev/null 2>&1 test $? -lt 2 && return 0 || return 1 } while true do echo "Saisissez un nombre" read nb numeric $nb && break echo "Votre nombre saisi n'est pas un nombre - Recommencez" done
Citation
Frédéric Brugmans
if [ "${variable//[0-9]/0}" -eq 0 ]
then echo "numerique -> OK"
else echo "pas num -> PAS OK"
fi
Tu rêves. Et c'est à ce moment queCitation
phenix
je rêve ou je vois une division par zero
Tu as oublié de fermer tes guillemets...Citation
mickpiet
je viens de tester, ca a pas l'air de marcher.
ma variable est nbr et comme test j'ai mis:
if [ "${nbr//[0-9]/0} -ne 0 ]
then
dialog --stdout --msgbox "la quantité s'exprime
en nombre" 5 50
return
fi
au test si je rentre une chaine de caractere dans
mon imputbox a la base ca l'enregistre quand meme
et ca m'envoie pas la fenetre d'erreur
if [ -z "$(echo ${variable} | sed /^[0-9]*$/!d)" ]; then echo "pas num -> PAS OK" else echo "numerique -> OK" fi
Hé oui. Quand tu connaitras mieux Frédéric brugmans (en lisant ses réponses) tu verras qu'il a toujours de très bonnes et très performantes solutions... mais qu'elles utilisent quasiment toujours des outils bash.Citation
Mushroom
Pour la solution de Frédéric Brugmans c'est très efficace mais ça ne marche qu'avec BASH.
Joli !!!Citation
Mushroom
Perso je passerais (encore) par sed :
if [ -z "$(echo ${variable} | sed /^[0-9]*$/!d)"]; then echo "pas num -> PAS OK" else echo "numerique -> OK" fi
C'est mickpiet qui a posé la question et pas moi. Tu devrais aller lire mon CV qui est sur mon site perso ce qui t'évitera à l'avenir de me reprendre pour une burne en shell...Citation
Mushroom
Allez, sortons notre boîte Mattel® Petit Sve@r
Tu remplaces dans l'expressionCitation
Mushroom
...soit que la variable était déjà vide
${variable}par
${variable:-" "}Et t'auras plus ce pb...
Etant donné que le "Petit Sve@r" était aussi en italique, je pense que "Mattel Petit Sve@r" était le nom de la boite dans l'esprit de Mushroom. Ca doit être une parodie d'un jouet existant, avec un nom connu à la place, en clair je pense qu'il te prend plutôt pour une référence. Ca me semblerait logique vu que depuis le temps où il vient sur ce forum il a déjà dû lire tes autres posts...Citation
Sve@r
C'est mickpiet qui a posé la question et pas moi. Tu devrais aller lire mon CV qui est sur mon site perso ce qui t'évitera à l'avenir de me reprendre pour une burne en shell...
Hum... faire de l'humour dans un post c'est déjà très difficile car on ne peut pas y inclure les inflexions de voix qui montrent justement l'humour lors d'un échange verbal. Alors faire un plus un private joke entre un jeu qui n'est pas forcément connu de tous et un pseudo d'un autre participant du forum, il y avait toutes les chances que cela tombât parfaitement à plat ce qui fût le cas...Citation
AlSim
Etant donné que le "Petit Sve@r" était aussi en italique, je pense que "Mattel Petit Sve@r" était le nom de la boite dans l'esprit de Mushroom. Ca doit être une parodie d'un jouet existant, avec un nom connu à la place...
Une chaîne vide n'est pas un nombre, il n'y aura donc aucun problème au niveau de la cohérence du filtre. Je n'ai jamais dit que c'en était un.Citation
Tu remplaces dans l'expression
${variable}par
${variable:-" "}Et t'auras plus ce pb...
Mea culpa, j'aurais dû mettre un smiley à la fin genre, je ne sais pas, un petit clown...Citation
Hum... faire de l'humour dans un post c'est déjà très difficile car on ne peut pas y inclure les inflexions de voix qui montrent justement l'humour lors d'un échange verbal.
Vu. Un conseil : tu devrais aussi user de smileys, au moins en page d'accueil : un esprit un poil terre-à-terre pourrait passer à côté du savoureux deuxième degré qui émaille chaque page de ce merveilleux site. Quelle subtilité dans l'auto-dérision !Citation
Tu devrais aller lire mon CV qui est sur mon site perso ce qui t'évitera à l'avenir de me reprendre pour une burne en shell...
Je faisais référence à son habitude d'expliciter entièrement les scripts, ce que je ne fais pour ma part pas spontanément (je touve ça assez barbant et en plus ça fait poster de grosses tartines).Citation
AlSim
Etant donné que le "Petit Sve@r" était aussi en italique, je pense que "Mattel Petit Sve@r" était le nom de la boite dans l'esprit de Mushroom. Ca doit être une parodie d'un jouet existant, avec un nom connu à la place, en clair je pense qu'il te prend plutôt pour une référence. Ca me semblerait logique vu que depuis le temps où il vient sur ce forum il a déjà dû lire tes autres posts...
Evidemment tu préfères laisser le débutant se débrouiller pour comprendre. De toute façon c'est de sa faute, il n'a qu'à ne pas être débutant n'est-ce pas ?Citation
Mushroom
Je faisais référence à son habitude d'expliciter entièrement les scripts, ce que je ne fais pour ma part pas spontanément (je touve ça assez barbant et en plus ça fait poster de grosses tartines).
Une "sorte"...Citation
Mushroom
Une sorte de geste de sociabilité en somme
Chacun ses lettres, chacun son altitude.Citation
Mushroom
Enfin, ayant mesuré la sublime hauteur avec laquelle chacune des sus-mentionnées explicitations est livrée, je vais laisser son altitude à l'enluminure de ses lettres de noblesse.
<myway.linus>Brugmans est un lâche, tout juste bon à proposer des solutions idiotes pour hamsters dégénérés débutant en shell (je précise pour les crétins que je ne mets pas de "s" à "débutant" parce que c'est ici un participe présent, présent sans "a").</fuckthestandards>
Ta solution aussi ne marche qu'avec BASH...Citation
Mushroom
Pour la solution de Frédéric Brugmans c'est très efficace mais ça ne marche qu'avec BASH.
Perso je passerais (encore) par sed :
if [ -z "$(echo ${variable} | sed /^[0-9]*$/!d)" ]; then ...
if [ -z "`echo ${variable} | sed /^[0-9]*$/!d`" ]; then ...
Alors là, mais tout à fait ! c'est la nature qui parle : il y a les élus qui connaissaient le shell dès leur premier souffle, et puis la lie qui se traîne de forum en forum pour mendier de l'aide. Tu ne pouvais pas être plus proche de ma vision des choses.Citation
Sve@r
Evidemment tu préfères laisser le débutant se débrouiller pour comprendre. De toute façon c'est de sa faute, il n'a qu'à ne pas être débutant n'est-ce pas ?
Mea maxima culpa, j'aurais du mettre des balises, histoire qu'on voit bien que ce message était dans son contexte d'un type un peu particulier (et puis glisser quelques références à un acteur du libre bien connu pour son humour à froid).Citation
Sve@r
Chacun ses lettres, chacun son altitude.
Je ne possède pas d'UNIX propriétaire, mais elle passe avec ash, ksh et zsh (pour peu qu'on ajoute des guillemets autour de l'expression régulière)...Citation
Sve@r
Ta solution aussi ne marche qu'avec BASH...