从Ubuntu终端使用不同的命令行参数循环

时间:2018-06-22 09:03:57

标签: linux bash ubuntu gcc

我试图从 Ubuntu终端执行的C程序文件(在Desktop上)被命名为distribution.c

我目前正在使用:

<admin-name>@<admin-name>-Latitude-E4310:~/Desktop$ g++ -o test distribution.c
<admin-name>@<admin-name>-Latitude-E4310:./test d0=0.3 d1=0.7 >output.txt

这很适合将.c程序文件生成的输出写入名为output.txt的.txt文件中。但是,我的目的是为d00.0范围内的每个1.0值生成输出文件(以0.01为步长)。一个约束是d1=1-d0。输出文件应命名为ouputxyz.txt,其中xyz对应于d0值中的三个数字。 (示例:output010.txt时输出文件名为d0=0.10)。是否可以从Ubuntu终端本身为此任务编写循环? (我不想为此在原始程序中添加另一个循环。)

顺便说一句,如果您需要有关我正在尝试做的任何其他详细信息,或者您认为该问题可以改进和/或更具体,请在评论中告知我。我很乐意详述。

2 个答案:

答案 0 :(得分:1)

Bash不支持浮点运算-因此,您必须诉诸bc之类的东西-如下例所示。

最简单的方法是将其放在Bash脚本中。 (您将需要安装bc。)

for ((i=0; i<=100; i++))
do
    x=`echo "scale=2; $i/100" | bc`
    y=`echo "scale=2; 1-$x" | bc`
    d0=`printf %.2f $x`
    d1=`printf %.2f $y`
    filename=`printf output%03d.txt $i`
    ./test d0=$d0 d1=$d1 >$filename
done

答案 1 :(得分:1)

这与上面的情况类似,但是增加的是另一个参数p0.001.00也以0.01的步长变化。

for ((n=0; n<=100; n++))
do
x=`echo "scale=2; $n/100" | bc`
y=`echo "scale=2; 1-$x" | bc`
    for ((i=0; i<=100; i++))
    do
        z=`echo "scale=2; $i/100" | bc`
        d0=`printf %.2f $x`
        d1=`printf %.2f $y`
        p=`printf %.2f $z`
        filename=`printf output%03d.txt $n`
        ./test L=1000 n=100 d0=$d0 d1=$d1 p=$p >>$filename
    done
done