GNU/Linux >> Tutoriels Linux >  >> Linux

Comment savoir si une durée est supérieure à une heure sur plusieurs scripts shell ?

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.


Linux
  1. Comment installer plusieurs distributions Linux sur une clé USB

  2. Partage de variables sur plusieurs scripts shell ?

  3. Que sont les scripts shell ? Comment créer des scripts shell ?

  4. Comment puis-je savoir si je suis dans un écran ?

  5. Comment puis-je copier plusieurs fichiers sur scp en une seule commande ?

Comment créer des scripts shell

Comment exécuter plusieurs commandes Linux en une seule commande

Comment fusionner plusieurs fichiers PDF en un seul PDF sous Linux

Comment utiliser if-else dans les scripts shell ?

Comment lire les arguments de ligne de commande dans les scripts shell ?

Comment compresser plusieurs fichiers dans un seul fichier gz?