下面是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呢?
我会随时回复后续报道:)
死后
这是完成的代码,感谢你们的帮助!(还有:别互相投票了!让我们做朋友吧,梅凯?
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 此代码获取电池的当前状态,并通知您:)
发布于 2014-02-19 04:10:56
当您使用sed 's/.00//'时,它基本上意味着匹配任何字符(.的意思),然后是00,并将其替换为零。因此,当您的输出中有100.00时,sed适当地从它中移除100并给出.00。
您真正需要的是用\来转义特殊字符。
... | sed 's/\..*//'
发布于 2014-02-19 04:05:15
试试这个:
bat_percent=`echo "$bat_percent * 100" | bc | sed 's/\.00//'`sed命令的问题是,您没有将.转义为\.来使用它作为文字;正则表达式中的未转义.匹配任何字符。
如果输入是"100.00",则/.00/与100匹配(因为.匹配任何字符,匹配1),而不是.00。
或者,如果您总是只想删除小数部分,请尝试如下:
bat_percent=$(bc <<<"$bat_percent * 100" | cut -d'.' -f 1)发布于 2014-02-19 04:16:45
也许这个
$ bat_percent=.999
$ awk "BEGIN{printf \"%d\",$bat_percent*100}"
99
$ bat_percent=1.000
$ awk "BEGIN{printf \"%d\",$bat_percent*100}"
100https://stackoverflow.com/questions/21870646
复制相似问题