Thought I had this worked out, and the equations work fine on their own.
What I have is an if statement that checks the raw size of a folder. Smaller than a certain threshold and it returns a value in MB format, otherwise it returns it in GBs. Yes, I know that df and du return human readable values, no I do not want to use them because I'm running OS X 10.6 and am trying to maintain the same values the Finder will display.
Also, the reason I'm passing the raw size instead of just using df -gH is that my source might not necessarily be the root directory, it may be just the user's folder.
sizeRAW=`df "$source" | awk '{print $3}' | sed s/Used//` #actually an if statement, uses either df or du to find the size depending upon it being a hard drive or a sub-folder.
if [ $sizeRAW -lt 1757813 ]; then
sizeHUMAN=`echo "scale=2; ($sizeRAW*512)/1000000" | bc | awk '{print $1"M"}'`
else
sizeHUMAN=`echo "scale=2; ($sizeRAW*512)/1000000000" | bc | awk '{print $1"G"}'`
fi
-x debug shows
+ '[' 496454408 -lt 1757813 ']'
++ echo 'scale=2; (
496454408*512)/1000000000'
++ bc
++ awk '{print $1"G"}'
(standard_in) 2: parse error
(standard_in) 2: parse error
+ sizeHUMAN=
The correct values are calculated in sizeRAW, and passed through the if statement and into the calculation for bc to handle. If I enter the same numbers at the command line, I get the correct value. Same is true if I set the value for sizeRAW and pass it to the calculation on the command line. For some reason, the script will occasionally error on this and other similar bc calculations.
Am I formatting the calculation incorrectly? Is there a better more acceptable way to do this?