2017-05-04 1715 views
0

我越来越平均负载在bash shell脚本,像这样在bash shell脚本转换字符串浮点数不BC

load=`echo $(cat /proc/loadavg | awk '{print $1}')` 

我知道管道公元前

load=`echo $(cat /proc/loadavg | awk '{print $1}') \> 3 | bc -l` 

在使用几乎所有的例子都是如何将$ load作为一个int转换的,但是这个框没有安装bc,我不允许添加它。

我试图

int=`perl -E "say $load - 0"` 

我试图

int=${load%.*} 

我试图

int=`printf -v int %.0f "$load"` 

我希望能够做的是

if [ "$int" -gt 3.5 ]; then 

我如何获得该评估的预期?

+0

awk打印浮点?你的意思是你想要它作为一个整数? – 123

+1

如果你只是想测试它是否大于3.5,你只需要awk。 '如果awk'$ 1 <3.5 {exit 1}'/ proc/loadavg;然后做东西; fi' – 123

回答

3

您可以使用awk来产生取决于条件的成功/失败:

# exit 0 (success) when load average greater than 3.5, so take the branch 
if awk '{ exit !($1 > 3.5) }' /proc/loadavg; then 
    # load average was greater than 3.5 
fi 

不幸的是,因为“成功”的外壳是0,你要反转,使AWK条件的逻辑以所需的状态退出。显然,您可以通过多种方式来完成此操作,例如将>更改为<=

3

你不需要任何外部工具(如awk)来阅读这些东西。从/proc/loadavg负载平均值始终格式化有两位小数,所以你可以这样做:

read load _ < /proc/loadavg 

if [ ${load/./} -gt 350 ]; then 
    # do something 
fi 
+0

为什么使用'_'? – ULick

+1

@ULick - 'read'命令使用分词将事物分解为变量,如果变量少于单词,则将该行的其余部分放入最后一个变量中。 'read load _'读取第一个单词,并将该行的其余部分放入throw-away变量'$ _'中。 – ghoti

+1

@ 123 - 我们是否在寻找平均3.50或35.00的平均负荷?我带着问题中的数字去了。 – ghoti