我在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中的浮点变量有关的东西,我似乎无法掌握它,所以我希望如果我解释我想要完成的事情,其中一个好人将能够解释:)
提前致谢。
答案 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