Comment utiliser une minuterie dans bash?

Javais besoin dun minuteur qui commencera au tout début du script et sarrêtera à la fin.

Commentaires

  • sil vous plaît, écrivez un objectif que vous souhaitez atteindre. pour mesurer le temps de travail du script, utilisez la commande time (time ./script.sh), pour imprimer lheure actuelle, utilisez la commande date et ainsi de suite.
  • stackoverflow.com/questions/3840558/…
  • Utilisez la commande Linux de base: time yourprogram.sh, que @Marius Cotofana a expliqué

Réponse

Si vous voulez la durée en secondes, utilisez en haut

start=$SECONDS 

et à la fin

duration=$(( SECONDS - start )) 

Commentaires

Réponse

Vous pouvez utiliser la commande time intégrée à Linux. Depuis la page de manuel:

time COMMAND [arguments]

time détermine les informations à afficher ay à propos des ressources utilisées par la COMMANDE à partir de la chaîne FORMAT. Si aucun format nest spécifié sur la ligne de commande, mais que la variable denvironnement TIME est définie, sa valeur est utilisée comme format.

Pour chronométrer le cleanup.sh script, utilisez:

$ time cleanup.sh 

Commentaires

Réponse

Je me rends compte que cest une question assez ancienne, mais cest comme ça que je le fais pour tout quand je veux / ai besoin de savoir combien de temps il a fallu quelque chose pour sexécuter.

Bash a un compteur de secondes intégré sous la forme dune variable interne nommée SECONDS (voir: ici pour les autres variables internes)

Mettez SECONDS=0 avant tout ce dont vous « vérifiez le temps dexécution. Il doit être après toute entrée utilisateur pour obtenir un bon résultat donc si vous « demandez des informations, placez-les 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 en:

echo "Completed in $SECONDS seconds" 

À titre dexemple:

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 

Commentaires

  • Un raccourci pour ceux qui ne Je souhaite un formatage de lheure aussi élaboré: date +%T -d "1/1 + $SECONDS sec" (limité à moins de 24h, mais vous pouvez également vous adapter pour ajouter des jours)
  • Excellent lien vers les variables internes de TLDP ' . Merci pour cela!

Réponse

#!/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}" 

Commentaires

  • Bonjour, bienvenue sur Unix SE! Les réponses au code uniquement don ' t semblent très bien, peut-être pourriez-vous expliquer ce que fait votre script.
  • Pourquoi multipliez-vous par 1000 ici, puis divisez par 1000 * modificateur plus tard pour toutes les valeurs affichées?

Réponse

@anask fait une solution intelligente pour cela réponse, je recommande simplement dutiliser le $SECONDS natif à la 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 du printf et la division consiste à convertir les secondes écoulées en lunité correspondante Heures, Mins, Secs, respectivement.

Réponse

Jai récemment tenté quelque chose de similaire. Je suggérerais:

date1=$(date +%s) #Use this arithmetic to determine elapsed time since defining date1 $(( $(date +%s) - $date1 )) #While loop using timer while ! [ $(( $(date +%s) - $date1 )) -gt 10 ]; do #Terminal timer -n won"t append new line, so the echo will replace itself. ##There is also some date formatting to achieve: HH:MM:SS. echo -ne "$(date -u --date @$(( $(date +%s) - $date1 )) +%H:%M:%S)\r" done 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *