2

我用 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 中的浮点变量有关,我似乎无法掌握它,所以我希望如果我解释我想要完成的事情,你们中的一个好人会能够解释:)

提前致谢。

4

3 回答 3

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
    }
}
于 2012-07-05T13:05:35.140 回答
2

巴什和公元前

#!/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 和 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

在这两个示例中,计数 (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
于 2012-07-05T23:42:43.123 回答
1

您可以通过编写等效脚本(实际上,您的伪代码和语法bc之间几乎没有区别)、调用它或其他任何方式来做到这一点:bcmyscript.bc

#!/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
于 2012-07-05T12:42:21.397 回答