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.