Question

J'essaie d'utiliser une boucle pour dans un script shell.

J'exécute une commande à partir d'un fichier texte. Je souhaite exécuter chaque commande 10 fois et insérer des statistiques dans un fichier CSV. Une fois cette commande effectuée, je souhaite commencer le prochain MAIS mettre un saut de ligne dans le fichier CSV après la première commande effectuée 10 fois.

Les éléments suivants sont-ils corrects:

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

Merci à tous pour toute aide

UPDATE

La boucle est exécutée correctement, mais je ne parviens pas à ajouter un saut de ligne après chaque commande exécutée 10 fois.

Était-ce utile?

La solution

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

Autres conseils

Ajoutez simplement une ligne " echo > > fichier.csv " après terminé ? Ou voulez-vous seulement une ligne vide entre chaque bloc de 10? Ensuite, vous pouvez effectuer les opérations suivantes:

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

Sinon, vous voudrez peut-être donner un exemple de la sortie souhaitée et de la sortie que vous obtenez maintenant.

Cela semble raisonnable. Fait-il ce que vous voulez?

Vous pouvez simplifier certaines choses, par exemple.

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

pourrait être juste

DIFF=$((END - START))

si END et START sont des entiers, il n'est pas nécessaire de mettre des éléments dans les variables si vous ne les utilisez qu'une fois.

Si ne ne fait pas ce que vous voulez, modifiez la question pour décrire le problème (ce que vous voyez et ce que vous préférez que ce soit le cas).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top