Bonjour, Pour faire suite au mail de Bruno, je transmets une question d'un collègue (ou plutot une prise de gueule qu'on a eu) Contexte : dans un script shell solaris/ksh, le monsieur récupére l'occupation des SAN, et ensuite vérifie si l'occupation de chaque parcelle est bien en dessous des limites proposées à l'utilisateur. Il génére lui-même la valeur "occupation d'une parcelle" sous la forme "34.76" (a partir du résultat d'une commande fourni par l'éditeur probablement), et compare celà à un seuil (mettons "90") avec quelque chose comme : [ 34.79 -lt 90 ] && echo ok Voilà, ca marche bien en ksh sous solaris. Ca ne marche pas en bash, ni en ksh sous solaris. Je lui ai conseillé de ne pas utilisé d'arithmétique flottante en shell et d'utiliser : a=34.79 [ ${a%%.*} -lt 90 ] && echo ok Pour enlever la virgule et ce qu'il y a après. Comment feriez-vous autrement/plus proprement ? Est-ce qu'il est possible de travailler sérieusement avec des flottants en shell (et que ce soit portable) ? Zsh not accepted : c'est déjà assez compliqué pour ce monsieur de comprendre "son" shell, ksh. ;-) Merci, Jeremy -- Linux Registered User #317862 Linux From Scratch Registered User #16571 Please do not send me .doc, .xls, .ppt, as I will *NOT* read them. Please send me only open formats, as OpenDocument or pdf.
On Feb 9, 2007, at 7:35 AM, Jeremy Monnet wrote:
Comment feriez-vous autrement/plus proprement ? Est-ce qu'il est possible de travailler sérieusement avec des flottants en shell (et que ce soit portable) ?
Zsh not accepted : c'est déjà assez compliqué pour ce monsieur de comprendre "son" shell, ksh. ;-)
Moi j'utiliserai zsh, avec tout le support qu'il a (eg: (( a - b )) ) pour les maths. Autrement en syntaxe shell, pour faire des calcules, avant d'utiliser zsh, je me basais sur la commande bc. Je sais que c'est pas une solution super portable, mais ça permet de tout faire niveau calcul. Sur certain système il y a dc qui est différent mais il va bien aussi. Par exemple, avec bc: #!/bin/sh case `echo "a=$a;b=$b;r=-1;if(a==b)r=0;if(a>b)r=1;r"|bc` in 0) echo a=$a and b=$b are equal ;; 1) echo a=$a is bigger then b=$b ;; *) echo a=$a is less then b=$b ;; esac -- Kuon Programmer and sysadmin. "Computers should not stop working when the users' brain does."
On 2007-02-09 12:30:38 +0100, =?UTF-8?Q? Kuon_-_Nicolas_Goy_-_=E6=99=82=E6=9C=9F=E7=B2=BE?= =?UTF-8?Q?=E9=9C=8A_=28Goyman.com_SA=29 ?= wrote:
Autrement en syntaxe shell, pour faire des calcules, avant d'utiliser zsh, je me basais sur la commande bc.
Pour info la commande bc n'existe pas sur Zaurus. Dans le temps, j'avais aussi trouvé des bugs sous Solaris (je ne sais pas si c'est toujours le cas).
Je sais que c'est pas une solution super portable, mais ça permet de tout faire niveau calcul. Sur certain système il y a dc qui est différent mais il va bien aussi.
dc existe bien sur Zaurus, mais pas n'est pas installée en standard sous Debian. -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
On 2007-02-09 07:35:01 +0100, Jeremy Monnet wrote:
Comment feriez-vous autrement/plus proprement ? Est-ce qu'il est possible de travailler sérieusement avec des flottants en shell (et que ce soit portable) ?
Portable: oublie le shell, surtout que ce n'est pas vraiment conçu pour des calculs en virgule flottante. Passer plutôt en Perl. -- Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/> Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
On 2/9/07, Vincent Lefevre <vincent@vinc17.org> wrote:
On 2007-02-09 07:35:01 +0100, Jeremy Monnet wrote:
Comment feriez-vous autrement/plus proprement ? Est-ce qu'il est possible de travailler sérieusement avec des flottants en shell (et que ce soit portable) ?
Portable: oublie le shell, surtout que ce n'est pas vraiment conçu pour des calculs en virgule flottante. Passer plutôt en Perl.
Enfin portable ... surtout portable sur la variété de serveurs présents dans mon entreprise ;-) Oui, je lui ai conseillé de passer à quelque chose de plus évolué (perl/python/ruby/awk (j'ai un doute sur awk, et la flemme de chercher)) si il souhaitait traiter des flottants. Bien, merci pour vos réponses, elles confirment ce que je pensais :-) Jeremy -- Linux Registered User #317862 Linux From Scratch Registered User #16571 Please do not send me .doc, .xls, .ppt, as I will *NOT* read them. Please send me only open formats, as OpenDocument or pdf.
On Feb 9, 2007, at 9:15 PM, Jeremy Monnet wrote:
On 2/9/07, Vincent Lefevre <vincent@vinc17.org> wrote:
On 2007-02-09 07:35:01 +0100, Jeremy Monnet wrote:
Comment feriez-vous autrement/plus proprement ? Est-ce qu'il est possible de travailler sérieusement avec des flottants en shell (et que ce soit portable) ?
Portable: oublie le shell, surtout que ce n'est pas vraiment conçu pour des calculs en virgule flottante. Passer plutôt en Perl.
Enfin portable ... surtout portable sur la variété de serveurs présents dans mon entreprise ;-) Oui, je lui ai conseillé de passer à quelque chose de plus évolué (perl/python/ruby/awk (j'ai un doute sur awk, et la flemme de chercher)) si il souhaitait traiter des flottants.
Si tu veux un truc VRAIMENT portable, tu fais un truc en C. Tu utilise seulement la lib standard et tu compile sous une machine avec la même architecture (ou cross compile). Je travaillais comme ça lorsque que j'avais besoin de faire des calcules sur des machines avec rien. (rien = VRAIMENT rien, pas de perl, shell = sh...) -- Kuon Programmer and sysadmin. "Computers should not stop working when the users' brain does."
participants (3)
-
Jeremy Monnet
-
Kuon - Nicolas Goy - 時期精霊 (Goyman.com SA)
-
Vincent Lefevre