首页 > 解决方案 > 如何在for循环中使用计数器作为bash文件中的输入

问题描述

我想多次运行 ac 代码。在 c 代码中,变量 ( n) 从命令行读取一个值。我想写一个 bash 文件来为我做这件事。但我不知道如何在 bash 文件的循环中读取值。bash 文件是这样的:

#!/bin/bash

EXE=exc3_1
RES=$EXE.d
for i in 2 4 8 16
do  
  COMMAND="mpirun -n $i $EXE >> $RES"
  echo $COMMAND
  eval $COMMAND 
done

gnuplot << EOF
set datafile separator " "
set xlabel "Num of procs"
set ylabel "time of operation"
set title "weak scaling of trapezoidal rule"
plot $RES
EOF

在命令之后,eval $COMMAND我应该读取n.

“已编辑”,该值n应用于 ac 代码中的输入参数,如下所示:

scanf("%d", &N);

我的意思是在 bash 文件的每次迭代中,应该从命令行读取 N 并用作

scanf("%d", &N);

在交流代码中。

标签: bashfor-loopinput

解决方案


要使用命令行输入作为文件的输入,|可以使用管道运算符,例如

read n
echo $n | eval $COMMAND

所以bash文件应该修改如下:

#!/bin/bash

EXE=exc3_1
RES=$EXE.d
for i in 2 4 8 16
do  
  COMMAND="mpirun -n $i $EXE >> $RES"
   echo $COMMAND
   read n
   echo $n | eval $COMMAND 
done

gnuplot << EOF
set datafile separator " "
set xlabel "Num of procs"
set ylabel "time of operation"
set title "weak scaling of trapezoidal rule"
plot $RES
EOF

推荐阅读