Ho uno script di backup sul mio server che esegue processi cron di backup e mi invia un riepilogo dei file di cui è stato eseguito il backup, inclusa la dimensione del nuovo file di backup. Come parte dello script, mi piacerebbe dividere la dimensione finale del file di (1024^3) per ottenere la dimensione del file in GB, dalla dimensione del file in byte.Il punto in virgola mobile risulta nella divisione intera Bash
Poiché bash non ha il calcolo in virgola mobile, sto provando a usare pipe to bc per ottenere il risultato, tuttavia mi sto facendo notare su esempi di base.
Ho cercato di ottenere il valore di Pi a una scala, tuttavia,
anche se i seguenti lavori:
~ #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 versione non interattiva non funziona:
#echo $((22/7)) | bc
3
Funziona:
#echo '22/7' | bc -l
3.14285714285714285714
Ma ho bisogno di usare le variabili. Così non aiuta che il seguente non funziona:
#a=22 ; b=7
#echo $((a/b)) | bc -l
3
Sono ovviamente manca qualcosa nella sintassi per l'utilizzo di variabili in Bash, e potrebbe utilizzare con alcuni 'indicatori' su quello che ho capito male.
Come ha detto DigitalRoss, posso utilizzare il seguente:
#echo $a/$b | bc -l
3.14285714285714285714
Tuttavia non posso usare espressioni complesse come:
#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 `('
Qualcuno può darmi una sintassi corretta di lavoro per ottenere risultati in virgola mobile con complicate espressioni aritmetiche?
È possibile insegnare bash ad es. divisione intera con risultati in virgola mobile: vedere: http://stackoverflow.com/a/24431665/3776858 – Cyrus