카운트를 유지하는 정수와 부동 소수점을 추가하는 방법은 무엇입니까?

카운트를 유지하는 정수와 부동 소수점을 추가하는 방법은 무엇입니까?

나는 단지 간단한 계산을 하려고 노력하고 있지만 결과는 그렇게 간단하지 않습니다. 지금까지 시도한 내용은 다음과 같습니다. 두 가지를 동시에 수행할 예정이므로 정수와 부동 소수점 덧셈 또는 뺄셈을 결합한 항목을 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에 추가합니다. 부동 소수점 값과 정수 값을 모두 사용합니다.

관련 정보