Mesurer le temps dans un script


8

Ce fil montre comment mesurer le temps nécessaire à l'exécution d'un script. Dans mon cas, je souhaite mesurer le temps entre deux points d'un script . Voici un exemple de la façon dont j'aimerais utiliser ceci:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

J'aimerais que l'heure affichée soit lisible par l'homme (secondes, minutes, heures, jours, etc.), si possible. Des idees pour faire cela?

Réponses:


7

Vous pouvez utiliser dateutil:

#!/bin/bash

start_measuring_time() {
  read s1 s2 < <(date +'%s %N')
}

stop_measuring_time() {
  read e1 e2 < <(date +'%s %N')
}

show_elapsed_time() {
  echo "$((e1-s1)) seconds, $((e2-s2)) nanoseconds"
}

start_measuring_time
sleep 2
stop_measuring_time
show_elapsed_time

Cela produira des erreurs: les heures de début et de fin doivent être interprétées comme des secondes + nanosecondes ensemble , pas séparément - vous pouvez obtenir des choses comme des valeurs négatives autrement.
rozcietrzewiacz

1
Voir ma réponse à cette question pour un moyen de résoudre ce problème.
rozcietrzewiacz

J'ai dû déprécier car sa réponse n'est pas complètement correcte, correcte, elle donne parfois des valeurs négatives, mais dans votre question, pourquoi ne mettez-vous pas d'écho avant Tend-Tstart et après$(
munish

11

Vous pouvez simplement utiliser time:

time (
Line 1
Line 2
..
Line N
)

Je pense que la sortie du temps est lisible par l'homme, mais si votre script va mesurer en jours, etc., vérifiez les man timeoptions de formatage pour la sortie.


Merci @frabjous! Je pense que j'accepterai la réponse de @ enzotib car elle me permet de mesurer le temps dans les flux de contrôle généraux (c'est-à-dire pas seulement dans les flux linéaires).
Amelio Vazquez-Reina

1

Exemple pour essayer timerscript.sh:

#!/bin/bash

#timing in minutes with %m
start=`date +%m`
echo 'Start:' $start
#do something e.g. wait for 1.30 minutes 
sleep 90

`end=`date +%m`
echo 'End: '$end
echo 'runtime: '$runtime
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.