我正在尝试在shell脚本中使用 for 循环。

我正在从文本文件中执行命令。我希望执行每个命令10次,并将一些统计信息插入到csv文件中。完成该命令后,我想开始下一个BUT在第一个完成10次命令之后在CSV文件中放置一个换行符。

以下是否正确:

#Function processLine
processLine(){
line="$@"
for i in 1 2 3 4 5 6 7 8 9 10
do
START=$(date +%s.%N)
echo "$line"
eval $line > /dev/null 2>&1

END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)

echo "$line, $START, $END, $DIFF" >> file.csv 2>&1
echo "It took $DIFF seconds"
echo $line
done
}

感谢大家的帮助

更新

它正在正确地执行循环,但是在每个命令执行10次后我无法添加换行符。

有帮助吗?

解决方案

processLine()
{
    line="$@"

    echo $line >> test_file
    for ((i = 1; i <= 10 ; i++))
    do
        # do not move to the next line
        echo -n "$i," >> test_file
    done

    # move to the next line: add the break
    echo >> test_file
}

echo -n > test_file

processLine 'ls'
processLine 'find . -name "*"'

其他提示

如何只添加一行“ echo&gt;&gt; FILE.CSV &QUOT;在完成之后?或者你只想在每个10块之间留一条空线?然后你可以做以下事情:

FIRST=1
processline()
{
  if (( FIRST )) then
    FIRST = 0
  else
    echo >> file.csv
  fi
  ...rest of code...
}

否则,您可能想要提供所需输出和现在输出的示例。

看起来很合理。它能做到你想要的吗?

你可以简化一些事情,例如

DIFF=$(echo "$END - $START" | bc)

可能只是

DIFF=$((END - START))

如果END和START是整数,如果你只打算使用一次,就没有必要把事情放在变量中。

如果它做你想做的事,请编辑问题来描述问题(你看到它做什么以及你宁愿做什么)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top