这是我的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和a。)
bat_percent=`echo "$bat_percent * 100" | bc | sed 's/000.//'`
输出为100.00
我该怎么做才能说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
此代码获取电池的当前状态,并通知您:)
答案 0 :(得分:3)
当您使用sed 's/.00//'
时,它基本上意味着匹配任何字符(.
的意思)后跟00
,并将其替换为空。因此,当您的输出中有100.00
时,sed
会正确删除100
,并为您提供.00
。
你真正需要的是用\
... | sed 's/\..*//'
答案 1 :(得分:2)
试试这个:
bat_percent=`echo "$bat_percent * 100" | bc | sed 's/\.00//'`
sed
命令的问题在于,您没有将.
转义为\.
以将其用作文字;正则表达式中未转义的.
与任何字符匹配。
如果输入为"100.00"
,则/.00/
与100
匹配(因为.
,因为匹配任何字符。匹配1
),而不是.00
{1}}。
或者,如果你总是只想删掉小数部分,试试这个:
bat_percent=$(bc <<<"$bat_percent * 100" | cut -d'.' -f 1)