J'avais besoin d'une minuterie qui commencera au tout début du script et s'arrêtera à la fin.
time yourprogram.sh
:, que @Marius Cotofana a expliqué
J'avais besoin d'une minuterie qui commencera au tout début du script et s'arrêtera à la fin.
time yourprogram.sh
:, que @Marius Cotofana a expliqué
Réponses:
Si vous voulez la durée en secondes, en haut utilisez
start=$SECONDS
et à la fin
duration=$(( SECONDS - start ))
Vous pouvez utiliser la time
commande intégrée de Linux . Depuis la page de manuel:
COMMANDE de temps [arguments]
time détermine les informations à afficher sur les ressources utilisées par la commande à partir de la chaîne FORMAT. Si aucun format n'est spécifié sur la ligne de commande, mais que la variable d'environnement TIME est définie, sa valeur est utilisée comme format.
Pour chronométrer le cleanup.sh
script, utilisez:
$ time cleanup.sh
time
vous utilisez. hackernoon.com/…
Je me rends compte que c'est une question assez ancienne, mais c'est la façon dont je le fais pour n'importe quoi quand je veux / besoin de savoir combien de temps quelque chose a pris pour fonctionner.
Bash a un compteur de secondes intégré sous la forme d'une variable interne nommée SECONDS
(voir: ici pour d'autres variables internes)
Mettez SECONDS=0
avant tout ce que vous vérifiez le temps d'exécution. Il doit être après toute entrée utilisateur pour obtenir un bon résultat, donc si vous demandez des informations, mettez-le après les invites.
Ensuite, mettez ceci à la fin de ce que vous vérifiez:
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
Si vous voulez seulement connaître le temps en secondes, vous pouvez simplifier ce qui précède pour:
echo "Completed in $SECONDS seconds"
Par exemple:
read -rp "What's your name? " "name"
SECONDS=0
echo "Hello, $name"
if (( $SECONDS > 3600 )) ; then
let "hours=SECONDS/3600"
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $hours hour(s), $minutes minute(s) and $seconds second(s)"
elif (( $SECONDS > 60 )) ; then
let "minutes=(SECONDS%3600)/60"
let "seconds=(SECONDS%3600)%60"
echo "Completed in $minutes minute(s) and $seconds second(s)"
else
echo "Completed in $SECONDS seconds"
fi
date +%T -d "1/1 + $SECONDS sec"
(limité à moins de 24h, mais vous pouvez aussi l'adapter pour ajouter des jours)
#!/bin/bash
start=$(date +%s)
#
# do something
sleep 10
#
#
end=$(date +%s)
seconds=$(echo "$end - $start" | bc)
echo $seconds' sec'
echo 'Formatted:'
awk -v t=$seconds 'BEGIN{t=int(t*1000); printf "%d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
@anask fait une solution intelligente pour cette réponse, je recommande simplement d'utiliser le natif à la $SECONDS
place pour en créer un nouveau
awk -v t=$SECONDS 'BEGIN{t=int(t*1000); printf "Elapsed Time (HH:MM:SS): %d:%02d:%02d\n", t/3600000, t/60000%60, t/1000%60}'
Le but de la printf
division est de convertir les secondes écoulées en heures, minutes, secondes correspondantes, respectivement.
time
commande d' utilisation du temps de travail du script (time ./script.sh), pour imprimer ladate
commande d' utilisation du temps actuel , etc.