Frage

Ich versuche eine zu benutzen for Schleifen in einem Shell -Skript.

Ich führe einen Befehl aus einer Textdatei aus. Ich möchte jeden Befehl 10 Mal ausführen und einige Statistiken in eine CSV -Datei einfügen. Nachdem dieser Befehl erledigt ist, möchte ich den nächsten starten, aber nach dem ersten Befehl, der zehnmal gemacht wurde, eine Zeilenpause in der CSV -Datei einlegen.

Ist das folgende richtig:

#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
}

Vielen Dank für jede Hilfe

AKTUALISIEREN

Es macht die Schleife richtig, aber ich kann es nicht dazu bringen, einen Zeilenumbruch hinzuzufügen, nachdem jeder Befehl 10 Mal ausgeführt wurde.

War es hilfreich?

Lösung

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 "*"'

Andere Tipps

Wie wäre es, wenn Sie nur eine Linie hinzufügen? "echo >> file.csv" nach done? Oder möchten Sie nur eine leere Linie zwischen jedem Block von 10? Dann könnten Sie Folgendes tun:

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

Andernfalls möchten Sie vielleicht ein Beispiel für die gewünschte Ausgabe und die Ausgabe geben, die Sie jetzt erhalten.

Es sieht vernünftig aus. Tut es, was Sie wollen?

Sie könnten einige Dinge vereinfachen, z. B.

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

könnte gerecht sein

DIFF=$((END - START))

Wenn Ende und Start Ganzzahlen sind und es nicht erforderlich ist, Dinge in Variablen zu stecken, wenn Sie sie nur einmal verwenden möchten.

Wenn es nicht Wenn Sie das tun, was Sie wollen, bearbeiten Sie die Frage, um das Problem zu beschreiben (was Sie sehen und was Sie lieber tun möchten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top