我正在尝试在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次后我无法添加换行符。
答案 0 :(得分:2)
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 "*"'
答案 1 :(得分:0)
看起来很合理。它能做到你想要的吗?
你可以简化一些事情,例如
DIFF=$(echo "$END - $START" | bc)
可能只是
DIFF=$((END - START))
如果END和START是整数,如果你只打算使用一次,就没有必要把事情放在变量中。
如果它不做你想做的事,请编辑问题来描述问题(你看到它做什么以及你宁愿做什么)。
答案 2 :(得分:0)
在echo >> file.csv
之后添加一行“done
”怎么样?或者你只想在每个10块之间留一条空线?然后你可以做以下事情:
FIRST=1
processline()
{
if (( FIRST )) then
FIRST = 0
else
echo >> file.csv
fi
...rest of code...
}
否则,您可能想要提供所需输出和现在输出的示例。