Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

echo dans un script bash

14 réponses
Avatar
Hugolino
Bonjour,

J'ai besoin de faire un calcul dans un script bash.

En console, la ligne
echo "73/10" | bc -l
répond
7.30000000000000000000

Dans mon script bash, la ligne
FNumberFormated=echo "$FNumberNumerateur/$FNumberDenominateur" | bc -l
produit
/usr/local/bin/GeneThumb: line 403: 73/10: Aucun fichier ou
répertoire de ce type

Il y a sans doute des moyens plus évolué de récuperer le résultat d'une
division dans un script bash et je suis ouvert à toute proposition (mais
j'ai besoin du chiffre après la virgule donc la ligne
FNumberFormated=$(($FNumberNumerateur/$FNumberDenominateur))
ne convient pas.

Mais j'aimerais bien savoir pourquoi le résultat d'une commande n'est
pas le même en console et dans un script.
Tout ce passe comme si le shell tentait d'interpréter l'argument que je
pipe à bc -l. Comment éviter cela ?


Merci de votre aide


--
| > la ces la galer totale, je ne suis pas ariver a en instaler un seul.
| Forcément, si on tape ./konfigur && maike && maike installe ça fonctionne
| moins bien. -+- remarque acide dans fcol.debats -+-
Hugo (né il y a 1 340 563 068 secondes)

10 réponses

1 2
Avatar
lhabert
Hugolino :

FNumberFormatedìho "$FNumberNumerateur/$FNumberDenominateur" | bc -l


Là, tu lances la commande « "$FNumberNumerateur/$FNumberDenominateur" | bc -l »
avec la variable d'environnement « FNumberFormated » positionnée à « echo »
(enfin je ne sais pas si elle est définie pour le membre de gauche du pipe
ou pour les deux, et j'ai la flemme de tester). Ce que tu veux faire, c'est :

FNumberFormated=`echo "$FNumberNumerateur/$FNumberDenominateur" | bc -l`

Mais j'aimerais bien savoir pourquoi le résultat d'une commande n'est
pas le même en console et dans un script.


Tu n'as pas tapé la même commande.

Avatar
Hugolino
Le Tue, 17 Oct 2006 23:39:38 +0200, Hugolino a écrit:

Bonjour,

J'ai besoin de faire un calcul dans un script bash.

En console, la ligne
echo "73/10" | bc -l
répond
7.30000000000000000000

Dans mon script bash, la ligne
FNumberFormatedìho "$FNumberNumerateur/$FNumberDenominateur" | bc -l
produit
/usr/local/bin/GeneThumb: line 403: 73/10: Aucun fichier ou
répertoire de ce type


J'ai trouvé (par hasard) que la ligne
FNumberFormated=$(echo "$FNumberNumerateur/$FNumberDenominateur" | bc -l
fonctionnait.
Mais je ne sais pas pourquoi, donc ce que je disais reste valable.

Mais j'aimerais bien savoir pourquoi le résultat d'une commande n'est
pas le même en console et dans un script.


Marre de galérer pour mettre au point des scripts :(


--
je sais pas di il y a quelqu'un sur internet à 1h48 mais j'aimerais bien
parler!
bisous
-+- poisson des iles In: Guide du linuxien pervers - "Bavardage..." -+-

Avatar
Hugolino
Le Tue, 17 Oct 2006 21:58:43 +0000 (UTC), Luc Habert a écrit:
Hugolino :

FNumberFormatedìho "$FNumberNumerateur/$FNumberDenominateur" | bc -l


Là, tu lances la commande « "$FNumberNumerateur/$FNumberDenominateur" | bc -l »
avec la variable d'environnement « FNumberFormated » positionnée à « echo »


Je n'ai pas compris ton histoire de "variable d'environnement", peux-tu
préciser
(enfin je ne sais pas si elle est définie pour le membre de gauche du pipe
ou pour les deux, et j'ai la flemme de tester). Ce que tu veux faire, c'est :

FNumberFormated=`echo "$FNumberNumerateur/$FNumberDenominateur" | bc -l`


Ce que j'ai fini par trouver mais *par hasard*, à force de tester tout
et n'importe quoi, et c'est ce qui est lassant.

Mais j'aimerais bien savoir pourquoi le résultat d'une commande n'est
pas le même en console et dans un script.


Tu n'as pas tapé la même commande.


A mon sens (mais je sais bien que je suis dans l'erreur), si. Puisque
dans la ligne
TestHabertìho "$FNumberNumerateur/$FNumberDenominateur" | bc -l
les deux variable $FNumberNumerateur et $FNumberDenominateur doivent
être évaluées avant d'être concaténées avec le "/" puis envoyées à bc.

Merci de ton aide.

--
PRIORITY ONE
INSURE RETURN OF ORGANISM FOR ANALYSIS.
ALL OTHER CONSIDERATIONS SECONDARY.
CREW EXPENDABLE.


Avatar
talon
Hugolino wrote:

Bonjour,

J'ai besoin de faire un calcul dans un script bash.

En console, la ligne
echo "73/10" | bc -l
répond
7.30000000000000000000

Dans mon script bash, la ligne
FNumberFormatedìho "$FNumberNumerateur/$FNumberDenominateur" | bc -l
produit
/usr/local/bin/GeneThumb: line 403: 73/10: Aucun fichier ou
répertoire de ce type



tulipe% Nums;Den;awk "BEGIN {print $Num/$Den}"
7,3

--

Michel TALON

Avatar
Pascal Bourguignon
Hugolino writes:
J'ai trouvé (par hasard) que la ligne
FNumberFormated=$(echo "$FNumberNumerateur/$FNumberDenominateur" | bc -l
fonctionnait.
Mais je ne sais pas pourquoi, donc ce que je disais reste valable.


La programmation ce n'est pas un jeu de hasard. Si tu veux du hasard,
vas à Las Vegas!

Mais j'aimerais bien savoir pourquoi le résultat d'une commande n'est
pas le même en console et dans un script.


Marre de galérer pour mettre au point des scripts :(


Bin, tu pourrais peut être commencer par apprendre le langage?

man bash


--
__Pascal Bourguignon__ http://www.informatimago.com/

READ THIS BEFORE OPENING PACKAGE: According to certain suggested
versions of the Grand Unified Theory, the primary particles
constituting this product may decay to nothingness within the next
four hundred million years.


Avatar
lhabert
Hugolino :

Je n'ai pas compris ton histoire de "variable d'environnement", peux-tu
préciser


Quand tu tapes « PLOUM=blah sblurb », c'est en gros la même chose que
« (PLOUM=blah; export blah; exec sblurb) ».

Tu n'as pas tapé la même commande.


A mon sens (mais je sais bien que je suis dans l'erreur), si. Puisque
dans la ligne
TestHabertìho "$FNumberNumerateur/$FNumberDenominateur" | bc -l
les deux variable $FNumberNumerateur et $FNumberDenominateur doivent
être évaluées avant d'être concaténées avec le "/" puis envoyées à bc.


À mon sens, « echo "73/10" | bc -l », ce n'est pas la même commande que :
FNumberFormatedìho "$FNumberNumerateur/$FNumberDenominateur" | bc -l


Avatar
lhabert
Hugolino :

J'ai trouvé (par hasard) que la ligne
FNumberFormated=$(echo "$FNumberNumerateur/$FNumberDenominateur" | bc -l
fonctionnait.
Mais je ne sais pas pourquoi


Bah parce que « $() » (à peu près équivalent à « `` », à la syntaxe des «  »
à l'intérieur près). est fait pour ça (exécuter une commande, récupérer sa
sortie, et l'insérér sur la ligne de commande à la place du « $(...) », un
peu comme si ça avait été tapé au clavier (mais pas complètement, il y a
beaucoup moins de parsing exécuté dessus, et dans cette situation, il n'y en
a aucun, à part virer les n finaux)).

Avatar
Hugolino
Le Wed, 18 Oct 2006 05:06:32 +0200, Pascal Bourguignon a écrit:
Hugolino writes:
J'ai trouvé (par hasard) que la ligne
FNumberFormated=$(echo "$FNumberNumerateur/$FNumberDenominateur" | bc -l
fonctionnait.
Mais je ne sais pas pourquoi, donc ce que je disais reste valable.


La programmation ce n'est pas un jeu de hasard. Si tu veux du hasard,
vas à Las Vegas!


Trop loin ;-)

Mais j'aimerais bien savoir pourquoi le résultat d'une commande n'est
pas le même en console et dans un script.


Marre de galérer pour mettre au point des scripts :(


Bin, tu pourrais peut être commencer par apprendre le langage?

man bash


Le problème c'est que je n'en fais pas assez pour retenir la syntaxe du
langage.
J'ai acheté le livre "Script sous Linux" de C.Blaess, mais la partie
consacrée à Bash fait plus de 200 pages, soit un peu trop pour servir de
pense bête.

Merci à tous pour votre aide.

--
PRIORITY ONE
INSURE RETURN OF ORGANISM FOR ANALYSIS.
ALL OTHER CONSIDERATIONS SECONDARY.
CREW EXPENDABLE.



Avatar
lhabert
Hugolino :

J'ai acheté le livre "Script sous Linux" de C.Blaess, mais la partie
consacrée à Bash fait plus de 200 pages, soit un peu trop pour servir de
pense bête.


Lis les pages info de bash, c'est assez bien pour débuter en shell.

Avatar
Pascal Bourguignon
Hugolino writes:

Le Wed, 18 Oct 2006 05:06:32 +0200, Pascal Bourguignon a écrit:
Hugolino writes:
J'ai trouvé (par hasard) que la ligne
FNumberFormated=$(echo "$FNumberNumerateur/$FNumberDenominateur" | bc -l
fonctionnait.
Mais je ne sais pas pourquoi, donc ce que je disais reste valable.


La programmation ce n'est pas un jeu de hasard. Si tu veux du hasard,
vas à Las Vegas!


Trop loin ;-)

Mais j'aimerais bien savoir pourquoi le résultat d'une commande n'est
pas le même en console et dans un script.


Marre de galérer pour mettre au point des scripts :(


Bin, tu pourrais peut être commencer par apprendre le langage?

man bash


Le problème c'est que je n'en fais pas assez pour retenir la syntaxe du
langage.
J'ai acheté le livre "Script sous Linux" de C.Blaess, mais la partie
consacrée à Bash fait plus de 200 pages, soit un peu trop pour servir de
pense bête.


Bin alors, pourquoi tu t'embête avec le shell?

Tu peux écrire tes scripts avec n'importe quel langage sur unix.
Il suffit de mettre le chemin de l'interpréteur au lieu du chemin de bash.

Par exemple, comme je travailles tout les jours avec lisp, je n'ai pas
de problème pour en retenir la syntaxe, alors j'écris:

[ tmp]$ cat ./script
#!/usr/bin/clisp -ansi
(destructuring-bind (&optional num denum)
(mapcar (function read-from-string) ext:*args*)
(if (and (numberp num) (numberp denum) (not (zerop denum)))
(print (/ num denum))
(format *error-output* "~&Invalid arguments, expects two numbers, ~
the second non null.~%")))
[ tmp]$ ./script
Invalid arguments, expects two numbers, the second non null.
[ tmp]$ ./script 4233 32

529/4
[ tmp]$



--
__Pascal Bourguignon__ http://www.informatimago.com/
Wanna go outside.
Oh, no! Help! I got outside!
Let me back inside!




1 2