Comment vérifier si aujourd'hui est un week-end en utilisant bash ou même perl?
Je souhaite empêcher certains programmes de s'exécuter un week-end.
Vous pouvez utiliser:
pax> if [[ $(date +%u) -gt 5 ]] ; then
> echo weekend
> fi
date +%u
vous donne le jour de la semaine du lundi (1) au dimanche (7). S'il est supérieur à 5 (samedi = 6 ou dimanche = 7), alors c'est le week-end.
Vous pouvez donc mettre quelque chose comme ça en haut de votre script:
if [[ $(date +%u) -gt 5 ]] ; then
echo 'Sorry, you cannot run this program today.'
exit
fi
Pour vérifier s'il s'agit d'un jour de semaine, utilisez:
if [[ $(date +%u) -lt 6 ]] ; then
case "$(date +%a)" in
Sat|Sun) echo "weekend";;
esac
C'est en fait un problème étonnamment difficile, car qui veut dire que "week-end" signifie samedi et dimanche ... ce qui constitue "le week-end" peut en fait varier selon les cultures (par exemple en Israël, les gens travaillent le dimanche et ont le vendredi). Bien que vous puissiez obtenir la date avec la commande date
, vous devrez stocker des données supplémentaires indiquant ce qui constitue le week-end pour chaque paramètre régional si vous souhaitez l'implémenter d'une manière qui fonctionne pour tous les utilisateurs. Si vous ne ciblez qu'un seul pays, la solution proposée dans les autres réponses fonctionnera ... mais il est toujours bon de garder à l'esprit les hypothèses formulées ici.
Utilisez l'opérateur localtime
de Perl.
heure locale
Convertit une heure renvoyée par la fonction heure en une liste de 9 éléments avec l'heure analysée pour le fuseau horaire local. Généralement utilisé comme suit:
# 0 1 2 3 4 5 6 7 8 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
…
$wday
est le jour de la semaine, 0 indiquant dimanche et 3 indiquant mercredi.
Par exemple:
$ date dim. août 15 20:27:29 CDT 2010 $ Perl -le 'my $ wday = (heure locale) [6]; print $ wday> = 1 && $ wday <= 5? "en semaine": "week-end" ' week-end
J'aime cette façon d'exécuter des programmes en semaine:
[[ $(date +%u) -lt 6 ]] && weekday-program
C'est une construction un peu délicate, mais compacte et facile à ajouter.
Je ne sais pas vraiment si cela convient à cette question, mais je voulais le partager pour aider les autres et c'est la question de Stack la plus proche de ce que je cherchais.
Il s'agit d'un script Shell que j'utilise pour démarrer une application lorsque je démarre mon ordinateur, l'application ne peut pas se connecter à son serveur pendant le week-end (son arrêt pour maintenance car le service ne fonctionne pas le week-end (application de trading forex).
Informations sur ce script, d est de 1 à 7 (du lundi au dimanche) h est de 24 fois. Vous pouvez ajuster cela à vos propres paramètres, peut-être avez-vous une maintenance en milieu de semaine ou toute autre cause. Ceci est mon tout premier script Shell, donc je suis sûr qu'il y a une meilleure façon et si quelqu'un veut apporter des modifications, n'hésitez pas à examiner pour acceptation (ou quelqu'un d'autre peut le faire)
#!/bin/bash
d=$(date +%u)
h=$(date +%H)
case $d in
'5')
# Friday after 10pm
if (($h >= 22)) ; then
exit
fi
;;
'6')
# all day saturday
exit
;;
'7')
#sunday before 10pm
if (($h < 22)) ; then
exit
fi
;;
*)
# any other time run the program
;;
esac
printf a aussi une date
printf -v day '%(%a)T'
case $day in
Sat|Sun) echo "Hooray!";;
esac
https://ideone.com/wU7C0c - démo