Script Unix pour comparer un horodatage avec le temps actuel
C'est mon premier voyage dans le royaume de scripts Unix et je ne suis pas sûr de savoir comment aller à ce sujet. Mal-être de l'interrogation de la base de données et en tirant un horodatage. Ce dont j'ai besoin pour faire est de prendre que l'horodatage (dans le super format de YYYYMMDDHHMMSS
) et si ses plus de 10 minutes, retourner 1 sinon retourner 0.
Encore une fois, j'ai essentiellement 0 de l'expérience avec ce type de script (arrière-plan est en C++ et C#) donc les gars si vous n'avez pas l'esprit un peu plus d'explications, je lui en serais reconnaissant - je veux savoir comment elle fonctionne.
Merci!
perl, python, ruby.. une préférence?
Utiliser la mise en forme de la
Il demande, en unix..
uhm? Donc, nous demandons aux qui interprète il préfère ... ce que les autres est "unix", que certaines un certain nombre de tout à fait différents environnements d'adhérer à une norme ou d'une marque, selon votre point de vue? 🙂
AAAAMMJJHHMMSS est un super format d'horodatage. Ma réponse ci-dessous montre pourquoi. Non seulement pouvez-vous faire des maths avec elle, mais il trie naturellement.
Utiliser la mise en forme de la
date
utilitaire pour formater l'heure actuelle, plus de 10*60 s dans le même format que la DB donne alors de faire une simple comparaison de chaînes de caractères. Trivial en Bash, mais je côté avec Karoly des préférences? ... 🙂Il demande, en unix..
uhm? Donc, nous demandons aux qui interprète il préfère ... ce que les autres est "unix", que certaines un certain nombre de tout à fait différents environnements d'adhérer à une norme ou d'une marque, selon votre point de vue? 🙂
AAAAMMJJHHMMSS est un super format d'horodatage. Ma réponse ci-dessous montre pourquoi. Non seulement pouvez-vous faire des maths avec elle, mais il trie naturellement.
OriginalL'auteur Hershizer33 | 2012-03-06
Vous devez vous connecter pour publier un commentaire.
On suppose que $dbtimestamp a l'horodatage retourné à partir de la base de données, mais je suis de codage en dur ici.
C'est le traitement de YmdHMS les chaînes de caractères comme ils étaient des nombres décimaux. $(( 20120306150000 - 20120306145959 )) renvoie 4041, pas 1
Oui, c'est pourquoi la très prochaine de la ligne compare la différence en quelques secondes à 600 (10 minutes), puis renvoie la valeur 0 ou 1.
La "meilleure" réponse est fausse : dbtimestamp=20120306142400 currenttimestamp=20120306143001 La différence arithmétique est : 601 mais entre les 2 horodatage, le sont à seulement 6 min et 1 sec :-/
ce djjeck voulais dire, c'est que les deux horodateurs il a utilisé sont à seulement 1 seconde appart, mais
secondsDiff
aura la valeur 4041, ce qui est supérieur à 600, et donc de retour de 1 bien que, décidément à moins de 10 minutes se sont écoulées. C'est encore pire lors du passage de minuit plus lors de la commutation des mois ou des années. Aussi, lorsque vous la comparez à l'encontre de 600 vérifier si la différence est supérieure à 6 minutes, pas plus de 10 minutes. Conclusion: comme il est maintenant, la réponse n'est pas correcte. Il fournit de mauvaises réponses dans de nombreux cas, lorsque la différence est inférieure à 10 minutes.OriginalL'auteur dj_segfault
La façon dont vos outils de travail dépend de la saveur de linux que vous utilisez. Le suivant devrait fonctionner sous Linux, FreeBSD, NetBSD, mac OSX, etc.
Remarque que c'est un
/bin/sh
script, pour des raisons de portabilité, pour ne pas prendre avantage de bash-ismes de vous peuvent être utilisés dans Linux, en particulier[[ ... ]]
et heretext de lire des variables.Oh, et je suppose que vous vouliez dire "valeur de sortie" quand vous avez dit "valeur de retour". Une valeur de retour serait le résultat d'une fonction, mais ce que j'ai écrit ci-dessus est un script autonome.
Noter que cela peut ne pas comprendre les horodatages dans l'avenir, ni prendre le fuseau horaire en considération. Si c'est important pour vous, vous devez, er, pour le considérer. 🙂 Et testez-le dans votre environnement.
OriginalL'auteur ghoti