2014-02-19 72 views
1

這裏的代碼在我的bash腳本的罪魁禍首行:百分比精度在bash

bat_percent=`echo "$bat_percent * 100" | bc | sed 's/.00//'` 

當bat_percent否則將推出100,它提出了.00

如果我將其更改爲(刪除和添加0)。

bat_percent=`echo "$bat_percent * 100" | bc | sed 's/000//'` 

甚至:(3 0的和)

bat_percent=`echo "$bat_percent * 100" | bc | sed 's/000.//'` 

輸出是100.00

在heck中,我如何說100,同時保持其他百分比如87或5?

我就在附近回答任何跟進:)

驗屍

這裏的成品代碼,感謝你們從幫助! (另外:停下來投票對方讓我們只做朋友,m'kay!?)

my_ac_adapt=`ioreg -w0 -l | grep ExternalConnected | awk '{print $5}'` 
cur_power=`ioreg -w0 -l | grep CurrentCapacity | awk '{print $5}'` 
max_power=`ioreg -w0 -l | grep MaxCapacity | awk '{print $5}'` 
bat_percent=`echo "scale=2;$cur_power/$max_power" | bc` 
bat_percent=`echo "$bat_percent * 100" | bc | sed 's/\..*//'` 
if [ "$my_ac_adapt" == "Yes" -a "$bat_percent" == "100" ] 
then 
echo "Charged" 
elif [ "$my_ac_adapt" == "Yes" -a "$bat_percent" != "100" ] 
then 
echo "Charging: $bat_percent%" 
else 
echo "Battery: $bat_percent%" 
fi 

這段代碼獲得您的電池的當前狀態,正是如此通知您:)

+1

我稍微您的問題困惑逃跑的特殊字符。 '$ bat_percent'的初始值是多少? – Carpetsmoker

+0

$ bat_percent是一個系統調用,可以獲得筆記本電腦電池剩餘電量的%。它不斷變化。但是,初始值與我的問題無關,因爲我只是想格式化輸出。 – iMatthewCM

+1

對。我認爲*你想要的是當'$ bat_percent'已經是'100'時有'100'?或者其他的東西?你應該爲'$ bat_percent'提供一些示例值。另外,你爲什麼還原我的編輯?我認爲這是建設性的,讓事情變得更清晰?誠實地說,我必須四次閱讀你的問題,我*仍然*不是100%確定你在問什麼... – Carpetsmoker

回答

3

當您使用sed 's/.00//'它主要是指00匹配遵循的字符(的.意思),並沒有取代它。因此,當您的輸出中有100.00時,sed會正確地從中刪除100,併爲您提供.00

你真正需要的是與\

... | sed 's/\..*//'

+1

這正是我所需要的,並且你的解釋是現成的。感謝您準確,簡潔,非常重要。我非常感謝你的時間! – iMatthewCM

+0

@Joodoo你很受歡迎。很高興我能幫忙。 –

2

試試這個:

bat_percent=`echo "$bat_percent * 100" | bc | sed 's/\.00//'` 

sed命令的問題是,你有沒有逃過.\.用它作爲文字;正則表達式中未轉義的.與ANY字符匹配。

如果輸入是"100.00"/.00/匹配100(因爲.,由於匹配任何炭。,匹配1),不.00

另外,如果你始終只是要刪除的小數部分,試試這個:

bat_percent=$(bc <<<"$bat_percent * 100" | cut -d'.' -f 1) 
+0

我試過你的解決方案以及我選擇的答案,而且你的確工作得很好!只是爲了延續其他一些不會返回小數的代碼行,我決定接受其他答案。不過,非常感謝。我從你的解釋中學到了很多,這非常有幫助! – iMatthewCM

+0

@Joodoo:我的榮幸。如果 - 並且只有 - 你認爲其他人可能會在我的答案中找到有用的信息_除了您接受的答案之外,您仍然可以對它進行投票。 – mklement0

+0

我做過了,其他一些大型投資者在投票前投下了你的票。否則,你會是負面的。我很抱歉:( – iMatthewCM