not - Resultados de punto flotante en la división de enteros Bash
bc command not found (2)
Simplemente comillas dobles ( "
) la expresión:
echo "$a / ( $b - 34 )" | bc -l
Entonces bash expandirá las variables $
e ignorará todo lo demás y bc
verá una expresión entre paréntesis:
$ a=22
$ b=7
$ echo "$a / ( $b - 34 )"
22 / ( 7 - 34 )
$ echo "$a / ( $b - 34 )" | bc -l
-.81481481481481481481
Tengo un script de respaldo en mi servidor que hace trabajos cron de copias de seguridad, y me envía un resumen de los archivos respaldados, incluido el tamaño del nuevo archivo de respaldo. Como parte de la secuencia de comandos, me gustaría dividir el tamaño final del archivo por (1024 ^ 3) para obtener el tamaño del archivo en GB, desde el tamaño del archivo en bytes.
Como bash no tiene cálculos de punto flotante, estoy tratando de usar pipes to bc para obtener el resultado, sin embargo, me estoy quedando perplejo con ejemplos básicos.
Traté de obtener el valor de Pi a una escala, sin embargo,
a pesar de que los siguientes trabajos:
~ #bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty''.
4/3
1.33333333333333333333
22/7
3.14285714285714285714
q
0
quit
Una versión no interactiva no funciona:
#echo $(( 22/7 )) | bc
3
Esto funciona:
#echo ''22/7'' | bc -l
3.14285714285714285714
Pero necesito usar variables. Por lo tanto, no ayuda que lo siguiente no funcione:
#a=22 ; b=7
#echo $(( a/b )) | bc -l
3
Obviamente me falta algo en la sintaxis para usar variables en Bash, y podría usar con algunos ''punteros'' en lo que he entendido mal.
Como dijo DigitalRoss, puedo usar lo siguiente:
#echo $a / $b | bc -l
3.14285714285714285714
Sin embargo, no puedo usar expresiones complejas como:
#echo $a / (( $b-34 )) | bc -l
-bash: syntax error near unexpected token `(''
#echo $a / (( b-34 )) | bc -l
-bash: syntax error near unexpected token `(''
#echo $a / (( b-34 )) | bc -l
-bash: syntax error near unexpected token `(''
¿Puede alguien darme una sintaxis correcta y correcta para obtener resultados de coma flotante con expresiones aritméticas complicadas?
Tenga en cuenta que su echo $(( 22/7 )) | bc -l
echo $(( 22/7 )) | bc -l
realmente hace que bash calcule 22/7 y luego envía el resultado a bc. Por lo tanto, la salida entera no es el resultado de bc, sino simplemente la entrada dada a bc.
Pruebe echo $(( 22/7 ))
sin conectarlo a bc, y verá.