Mam skrypt kopii zapasowej na moim serwerze, który wykonuje zadania kopii zapasowych cron, i przesyła mi podsumowanie kopii zapasowych plików, w tym rozmiar nowego pliku kopii zapasowej. W ramach skryptu chciałbym podzielić końcowy rozmiar pliku na (1024^3), aby uzyskać rozmiar pliku w GB, od rozmiaru pliku w bajtach.Punkt zmiennoprzecinkowy powoduje podział całkowity Bash
Ponieważ bash nie ma obliczeń zmiennoprzecinkowych, próbuję użyć potoków do bc, aby uzyskać wynik, jednak jestem zbity z powodu podstawowych przykładów.
Starałem się uzyskać wartość liczby Pi do skali, jednak
chociaż następujących prac:
~ #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
Non wersja interaktywna nie działa:
#echo $((22/7)) | bc
3
To działa:
#echo '22/7' | bc -l
3.14285714285714285714
Ale potrzebuję użyć zmiennych. Więc robi to pomoże, że następujące nie działa:
#a=22 ; b=7
#echo $((a/b)) | bc -l
3
Ja oczywiście brakuje czegoś w składni za pomocą zmiennych w bashu, a przydałby z niektórych „wskaźników” na co ja źle.
Jak powiedział DigitalRoss, mogę użyć następujących:
#echo $a/$b | bc -l
3.14285714285714285714
Jednak nie mogę używać skomplikowanych wyrażeń takich jak:
#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 `('
Czy ktoś może dać mi pracę poprawnej składni dla uzyskania pływających wyników punktowych z skomplikowane wyrażenia arytmetyczne?
Jest możliwe nauczanie basha, np. Liczba całkowita z wynikami zmiennoprzecinkowymi: Zobacz: http://stackoverflow.com/a/24431665/3776858 – Cyrus