Bash脚本双重表达式导致问题

时间:2012-03-12 12:01:05

标签: bash unix double

我正在尝试编写一个简单的脚本来检查包含某个字符串(包含一个double)的行数。但是我遇到了一些问题。这是我写的剧本

#!/bin/bash

x=0.1
while [ $x -le 5 ]
do
        cat b.txt | grep "Red: $x" | wc -l >> blah
        x=$(( $x + 0.1 ))
done

然而,当我尝试执行它时,我收到以下错误,我不知道如何解决:

/counter: line 4: [: 0.1: integer expression expected

请有人帮帮我吗?

示例文件:

Red: 0.1
Red: 1.1
Red: 2.3
Red: 0.5
Red: 3.9
Red: 1.0
Red: 4.4

4 个答案:

答案 0 :(得分:2)

Bash仅适用于整数。请参阅bash手册页中的ARITHMETIC EVALUATION部分。

(即使它确实浮点数,你也会遇到小数分数问题。考虑用值1表示0.1,0.2作为2,依此类推,这样4.7就变成了47.然后你可以看到数十位跟随按字面数字后跟数字。)

答案 1 :(得分:1)

对于浮点运算,最好使用“bc”:这是一个不错的教程: http://www.linuxjournal.com/content/floating-point-math-bash

x=0.1
x=`echo $x+0.1|bc`

答案 2 :(得分:1)

您可以使用bc进行浮点算术:

[ $(bc<<<"$x<5") -eq 1 ]

答案 3 :(得分:1)

最好将awk用于此类non-Integer Mathematical calculations。考虑一下这个awk脚本:

awk '/Red:/{if (sum<5) sum+=$2;} END{print sum;}' file