J'essaie de vérifier le temps d'exécution et s'il est supérieur à une heure, renvoie une erreur, mais le code renvoie des faux positifs par intermittence. Dans firstRun.sh
, je lis le temps comme :
export START_H=`date +%H`
export START_M=`date +%m`
et dans secondRun.sh
Je vérifie l'heure comme suit :
CURRENT_H=`date +%H`
CURRENT_M=`date +%M`
TIME=`expr $CURRENT_H - $START_H`
if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
echo "boot time is more than an hour"
fi
Quelqu'un peut-il m'aider à trouver d'où vient le problème ? Y a-t-il une différence entre l'utilisation de &&
et -a
dans l'instruction if ? Ou toute différence entre l'utilisation de []
et ()
?
Réponse acceptée :
export BOOT_TIME=$(date +%s)
current=$(date +%s)
(( current - BOOT_TIME >3600 )) && echo "More than an hour"
%s
renvoie les secondes depuis le 1970-01-01 00:00:00 UTC.
Discussion :pourquoi les secondes sont meilleures
Supposons, par exemple, que l'heure de démarrage (démarrage) soit 23h00 et que l'heure actuelle soit 00h23. Ensuite, $TIME
est négatif et cela ne fonctionnera pas :
if [ $TIME -gt 0 ] && [ $START_M -lt $CURRENT_M ]; then
echo "boot time is more than an hour"
fi
De même, supposons que l'heure de début soit 12h03 et que l'heure actuelle soit 14h00. Ensuite, ce qui précède ne fonctionnera pas non plus, cette fois à cause du test des minutes.