0

forシェルスクリプトでループを使用しようとしています。

テキストファイルからコマンドを実行しています。各コマンドを 10 回実行し、いくつかの統計を csv ファイルに挿入したいと考えています。そのコマンドが実行された後、次のコマンドを開始したいのですが、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 回実行された後に改行を追加することはできません。

4

3 に答える 3

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 "*"'
于 2009-03-07T15:10:04.830 に答える
0

リーズナブルに見えます。それはあなたが望むことをしますか?

あなたはいくつかのことを単純化することができます、例えば

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

ただかもしれない

DIFF=$((END - START))

ENDとSTARTが整数であり、一度だけ使用する場合は変数に入れる必要はありません。

希望どおりに機能しない場合は、質問を編集して問題を説明します(問題が何をしているのか、何をしたいのか)。

于 2009-03-07T15:04:39.010 に答える