如何在bash / batch脚本中减少浮点变量

时间:2012-07-05 12:10:51

标签: bash floating-point bc

我在C中编写了一个程序,需要将四个浮点变量作为参数传递给它。我想创建一个脚本来运行这个程序x次,每次再次执行程序之前,这四个变量都会减少一定量。

Batch和bash不支持浮点数,但是bc支持可以在bash脚本中使用的任意精度。我应该说我以前没有做任何脚本,除了最近的批处理脚本导致我认识批处理不合适。

作为这个领域的亲戚,我的谷歌搜索和搜索没有找到对我特别有用的东西,所以我在这里。

基本上我想要的是:

MINX=-2.0
MAXX=0.8
MINY=-1.4
MAXY=1.4

for X times
{
    myprogram minX maxX minY maxY

    MINX-=0.1
    MAXX-=0.1
    MINY-=0.1
    MAXY-=0.1
}

所以我想用初始变量设置运行程序,然后减少这些变量并再次运行程序,依此类推......

到目前为止我发现的所有与bash + bc中的浮点变量有关的东西,我似乎无法掌握它,所以我希望如果我解释我想要完成的事情,其中​​一个好人将能够解释:)

提前致谢。

3 个答案:

答案 0 :(得分:4)

在AWK中写下整个内容:

#!/usr/bin/awk -f
BEGIN {
    X = 100
    minX = -2.0
    maxX = 0.8
    minY = -1.4
    maxY = 1.4

    for (i = 1; i <= X; i++) {
        system("myprogram " minX " " maxX " " minY " " maxY)

        minX -= 0.1
        maxX -= 0.1
        minY -= 0.1
        maxY -= 0.1
    }
}

答案 1 :(得分:2)

bash&amp; BC

#!/bin/bash
X=3     #cycle count

MINX=-2.0
MAXX=0.8
MINY=-1.4
MAXY=1.4

function fpcalc() {
    echo "scale=4; $@" | bc -l
}

X=$(($X + 1))
while let X-=1
do
    echo myprog  $MINX $MAXX $MINY $MAXY    #delete the echo
    MINX=$(fpcalc $MINX-0.1)
    MAXX=$(fpcalc $MAXX -0.1)
    MINY=$(fpcalc $MINY -0.1)
    MAXY=$(fpcalc $MAXY -0.1)
done

perl&amp; bash的

#delete the "echo" after the "xargs"
echo -2.0 0.8 -1.4 1.4 | perl -lane 'for(1..3){print"@F";@F=map{$_-=0.1}@F}' | xargs -L 1 echo myprog

在这两个例子中都是count(X)= 3.两者都产生输出(当你删除“echo”时会运行myprog)

myprog -2.0 0.8 -1.4 1.4
myprog -2.1 0.7 -1.5 1.3
myprog -2.2 0.6 -1.6 1.2

答案 2 :(得分:1)

你可以通过编写一个等效的bc脚本来实现这一点(实际上,你的伪代码和bc语法之间几乎没有区别),称之为myscript.bc或其他任何东西:< / p>

#!/usr/bin/bc -q

minx = -2.0
maxx = 0.8
miny = -1.4
maxy = 1.4

for (x = 0; x < 10; x = x+1)
  {
    print "myprogram ", minx, " ", maxx, " ", miny, " ", maxy, "\n"

    minx = minx - 0.1
    maxx = maxx - 0.1
    miny = miny - 0.1
    maxy = maxy - 0.1
  }

halt

然后只需将其输出传递给(ba)sh

bc -q myscript.bc | sh

或者,如果脚本是'可执行的'(感谢shebang),你甚至可以这样做:

./myscript.bc | sh