这是我的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
此代码获取电池的当前状态,并因此通知您:)
当你使用sed 's/.00//'
时,它基本上意味着匹配任何字符(.
的含义),后跟00
并将其替换为任何字符。因此,当您的输出中有100.00
时,sed
适当地从中删除100
并为您提供.00
.
你真正需要的是用逃离特殊角色
... | sed 's/..*//'
试试这个:
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)
也许这个
$ bat_percent=.999
$ awk "BEGIN{printf "%d",$bat_percent*100}"
99
$ bat_percent=1.000
$ awk "BEGIN{printf "%d",$bat_percent*100}"
100