Je devine que le problème vient du fait que les variables ncd et ncdmin sont des nombres à virgule flottante representée par une virgule ( , ), tandis que bc(1) ne reconnait que la notation internationale, i.e. le point ( . ).
Tu ne peux pas y remédier directement via bc(1) car POSIX stipule que, pour des raisons de parsing, seul le point doit être utilisé pour cette représentation, quelque soit le locale utilisé. (e.g. ambiguïté nombres décimaux / arguments de fonction)
Donc, si ncd et ncdmin ont des valeurs en dur, remplace juste la virgule par un point. Sinon, si elles proviennent d'une sortie quelconque, tu dois utiliser tr(1) par exemple, pour automatiser ladite manipulation.
Ou si t'utilises bash(1) (ce que j'ai appris dans ton autre topic), tu peux faire la substitution pour chaque, en modifiant les expansions par ${ncd/,/.} et ${ncdmin/,/.}, respectivement.
Aussi, l'utilisation du flag -l de bc(1) est inutile ici.
La simple comparaison de nombres décimaux ne nécessite pas de bibliothèque.
Knakis Voir le profil de Knakis
Posté le 8 novembre 2013 à 20:59:42 Avertir un administrateur
Je sais pas trop ce que tu veux faire, mais le signe d'égalité est un symbole d'afféctation en shell.
Ce qui est juste:
if [ $(bc -l <<<"$ncd < $ncdmin") == 1 ]
== est le symbole de comparaison.
Non, == n'est pas un opérateur valide de test(1). S'il fonctionne dans ton shell, c'est que ce dernier utilise un builtin reproduisant le comportement de test(1) tout en acceptant l'opérateur ==. Il n'est pas défini par POSIX ; seul = sert à tester l'égalité de *chaînes de caractères*.