カウントを維持する整数と浮動小数点を追加する方法は?

カウントを維持する整数と浮動小数点を追加する方法は?

私は単純な計算をしようとしていますが、結果はそれほど単純ではありません。これまでに試したことは次のとおりです。 2つを同時に実行する予定なので、整数と浮動小数点の加算または減算を組み合わせた項目はGoogleに見つかりませんでした。

処理中の合計MBと保存された合計MBを維持する必要があります。したがって、浮動小数点と整数を同時に加算して減算し、すべて一緒に減算する必要があります。

#! /bin/bash


# I've tried with and without using this typeset to integer
# even though float won't work with integer -- just ball parking 
# and googling - :\

# typeset -i MB1 MB2


# using EXIFTOOL to get the megabytes off of files then add and subtract
# the values is what I need to do


FileSize1="`exiftool '-File Size'  "The Motels - Careful.mp3" -p   '$FileSize'`"


MB1="${FileSize1% *}" # removes the MB and leaves just the numbers both
                      # integer and float with demimal point - 3.3 



FileSize2="`exiftool '-File Size'  "02 Only The Lonely.flac" -p '$FileSize'`"

MB2="${FileSize2% *}"

echo "$FileSize1"
echo "$MB1"
echo "$FileSize2"
echo "$MB2"

6.4 MB
6.4
19 MB
19

total=`echo $MB1 + $MB2 | bc`  

echo $total  "   total"

# error message here is: 
# ./getMB: line 20: 6.4+19: syntax error: invalid arithmetic operator (error token is ".4+19")

answer=$(($MB1+$MB2)) # doesn't work

echo "$answer" " -- answer=="

# error message : line 16: 6.4+19: syntax error: invalid arithmetic operator (error token is ".4+19")

answer=`expr $MB1 + MB2`

echo "$answer" " -- answer=="

# error message : expr: non-integer argument

# then added typeset -i MB1 MB2
# then I get this error message
# ./getMB: line 7: ���������
# : 6.4: syntax error: invalid arithmetic operator (error token is ".4")

echo "$answer" " -- answer=="

ベストアンサー1

bc を使用して浮動小数点と整数で基本数学演算を実行し、ループ内の実行回数を保持します。

#!/bin/bash

#variable to keep changing amount
#declared outside of loop before it
#runs

changeVal=0



while amount < stopPoint ; do

# get the MB of orginal file
FileSize1="`exiftool '-File Size'  "$FILENAME" -p '$FileSize'`"

#re-sampling mp3 code here 
 lame what ever args firstFileName endFileName

# get the MB of new file
FileSize2="`exiftool '-File Size'  "$FILENAME" -p '$FileSize'`"

# strip off the 'MB' leaving just the values
MB1="${FileSize1% *}"
MB2="${FileSize2% *}"


# out put formatted by using spaces 
echo "  "$MB1"  MB1 - start size"
echo "- "$MB2"  MB2 - ending size"
#holds remaining value 
totalSaveOnFile=`echo $MB1 - $MB2 | bc`
echo "----------"
echo "  "$totalSaveOnFile" regained space" 
 #keeps last total -- then adds it to a new remaining value
 # giving a new tally of total 
 maxSaved=`echo $totalSaveOnFile + $maxSaved | bc`

 echo "  "$maxSaved " Total space saved do far"

 let amount++
 done 

ループは実行可能ではありません。しかし、実行回数を維持するコードは良いコードです。 bcの使い方を調べた後、自分でテストしました。 @glenn jackmanに教えてくれてありがとう。

maxSaved=`echo $totalSaveOnFile + $maxSaved | bc`

TotalSaveOnFileは、以前のファイルとリサンプリングされたファイルサイズとの差の新しい合計を保存し、すでに変数に含まれている内容をそれに追加し、新しいtotalSaveOnFile変数を追加して、HDDストレージスペースに新しい総量を提供してmaxSavedに追加します。浮動小数点値と整数値の両方を使用します。

おすすめ記事