vérifier si l'heure actuelle est entre deux fois au format HHmmss en script shell
J'ai un script qui appelle doSomeWork.sh chacun et tous les 10 minutes.
Mais à la condition que le doSomeWork.sh il ne faut pas courir entre 23:30:00 à 03:00:00.
J'ai fait mon script à ressembler à quelque chose comme ci-dessous.
#!/bin/ksh
prodStartTime="030000"
prodEndTime="233000"
currentTime=`date +"%H%M%S"`
echo $prodStartTime
echo $prodEndTime
echo $currentTime
while true
do
if [[ $currentTime -ge $prodStartTime && $currentTime -le $prodEndTime ]];
then
./doSomeWork.sh
else
echo Do Nothing
fi
sleep 600
done
Mise à JOUR: Maintenant, j'ai le code de travail en cochant la production timings au lieu du mode nuit timings(Voir l'historique des modifications). Mais on dirait que mon script est en considérant les valeurs Octales comme suggéré par "twalberg" dans les commentaires. Quelqu'un pourrait-il m'aider comment prendre soin de ces valeurs?
J'ai simplement besoin d'un moyen pour s'assurer que mon script s'exécute entre la période spécifiée.
nightModeStartTime=230000; nightModeEndTime=033000
Ce n'est pas de travail? Il peut aussi faire sens (lorsque vous appuyez sur l'interdiction de la fenêtre) pour dormir plus longtemps (peut-être même presque toute la longueur de la fenêtre tout à la fois) pour éviter le bouclage si souvent au cours de la fenêtre.
Avez-vous pensé que votre
033000
(et tout résultat de date
qui a zéros) est susceptible d'être interprétée comme un nombre octal? Vous n'avez pas vraiment expliquer comment ça ne marche pas, donc c'est juste une supposition, mais... ce serait le cas dans bash
, mais je ne sais pas si la version de ksh
vous travaillez avec le ferais ou pas.Script, comme il est indiqué ne sera pas exécuté
./doSomeWork.sh
entre 23:00:00 et 03:30:00 (pas comme Vous l'écrivez à 23:30:00 et 03:00:00), si c'est un problème.OriginalL'auteur Raja Anbazhagan | 2014-12-05
Vous devez vous connecter pour publier un commentaire.
Ne pas les comparer numériquement (
-ge
,-le
); il suffit de comparer des chaînes de caractères. Depuisksh
n'a pas>=
et<=
, vous pouvez utiliser l'équivalent! <
et! >
à la place.Mais comme nous sommes de nier, il peut être plus clair si l'on applique la Loi de DeMorgan et seulement nier la fois:
Dans tous les cas, lors de l'utilisation de
<
et>
, il n'y a pas d'interprétation des cordes comme des nombres (octal ou autrement) à s'inquiéter. Tant que les temps ont le même nombre de chiffres, la chaîne de comparaison permettra de produire la bonne réponse.La révocation de l'acceptation de la réponse que mes scripts logique a été une erreur de ne pas la syntaxe.
Vous devez accepter cette réponse, et non votre propre: en dépit de la chasse aux sorcières qui vous corrigée, votre script est toujours faux, car il est de comparer les valeurs comme des nombres (et en effet parfois des nombres octaux et parfois sous forme de nombres décimaux) lorsque que @Marque de notes de Lecture, ils devraient être comparés comme des chaînes de caractères. Ce que vous avez maintenant , mais seulement par accident.
Le octal interprétation en ksh est gérée en interne par le décapage de 0. voir stackoverflow.com/a/3192381/2557818
OriginalL'auteur Mark Reed
Je devrais être le calcul de l'heure actuelle à l'intérieur de la boucle. Mais j'ai calculé qu'une seule fois à l'extérieur de la boucle, et en utilisant la même valeur à travers la journée.
Le script devrait être.
En quelque sorte cette stupide erreur n'est pas visible à mes yeux.
OriginalL'auteur Raja Anbazhagan
Vous pouvez aussi le faire sur la solution de facilité..
OriginalL'auteur jnikolic
OriginalL'auteur siddhartha jain