在bash shell脚本中将字符串转换为浮点数而不使用bc

时间:2017-05-04 16:09:26

标签: bash shell

我在bash shell脚本中获得平均负载

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

我知道管道到bc

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

如何按预期进行评估?

2 个答案:

答案 0 :(得分: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

不幸的是,因为&#34;成功&#34;在shell中为0,您必须反转条件的逻辑以使awk退出所需的状态。显然,您可以通过多种方式执行此操作,例如将>更改为<=

答案 1 :(得分:3)

您不需要任何外部工具(如awk)来阅读这些内容。 maxRetention: 157680000 xFilesFactor: 0.5 aggregationMethod: average fileSize: 2521504 Archive 0 retention: 691200 secondsPerPoint: 10 points: 69120 size: 829440 offset: 64 Archive 1 retention: 2678400 secondsPerPoint: 60 points: 44640 size: 535680 offset: 829504 Archive 2 retention: 31536000 secondsPerPoint: 600 points: 52560 size: 630720 offset: 1365184 Archive 3 retention: 157680000 secondsPerPoint: 3600 points: 43800 size: 525600 offset: 1995904 的平均负载总是格式化为两位小数,因此您可以这样做:

/proc/loadavg