# Plage horaire en shell

**URL:** <https://www.debian-fr.org/t/plage-horaire-en-shell/35018>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018 "2016-02-21T03:53:54Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Saachaa](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/48db29/32.png) [@Saachaa](https://www.debian-fr.org/u/Saachaa)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/1 "2016-02-21T03:53:54Z")

</div>

Bonjour à tous,

Question fort simple, mais difficile à interpréter pour moi.

J’ai fais un simple script en shell, et j’aimerais une boucle de ce style:

Pour le temps de 22h à 6h, faire cela, sinon (temps de 6h01 à 21h59) faire ceci.

Je pense qu’une simple boucle for fera l’affaire, mais j’ai beaucoup de mal avec.

Merci à vous 🙂

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/2 "2016-02-21T03:53:54Z")

</div>

C’est pas clair du tout… ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

Tu veux faire un script qui tourne en permanence, et qui fait une chose ou l’autre en fonction de l’heure c’est ça ? Mais s’il tourne en permanence, ça veut dire 100% CPU, c’est probablement pas ce que tu veux. Ça serait pas plus simple et plus adapté de configurer un cron ?

---

<div class="post-metadata">

**Author:** ![Saachaa](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/48db29/32.png) [@Saachaa](https://www.debian-fr.org/u/Saachaa)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/3 "2016-02-21T03:53:55Z")

</div>

Salut 🙂

> [@syam](#):
>
> Tu veux faire un script qui tourne en permanence, et qui fait une chose ou l’autre en fonction de l’heure c’est ça ?

C’est ça.

> [@syam](#):
>
> Mais s’il tourne en permanence, ça veut dire 100% CPU, c’est probablement pas ce que tu veux.

Càd ? Le pc sera dédié à cela, donc tant que ça reste acceptable.

> [@syam](#):
>
> Ça serait pas plus simple et plus adapté de configurer un cron ?

Non je ne pense pas 😛. Je vais me servir énormément des plages horaires dans mon script, je pense qu’une boucle sera plus adaptée.

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/4 "2016-02-21T03:53:55Z")

</div>

Et si tu expliquais le but (à moins que ça soit un secret d’état ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")) plutôt que le moyen ? Parce que là franchement je vois pas vraiment ce qui pourrait justifier de faire tourner le CPU à 100% en permanence.

Sinon,

`while true; do
  HEURE="$(date +%H)"
  if [$HEURE -ge 22] || [$HEURE -lt 6]; then
    # de 22h (inclus) à 6h (exclus)
  else
    # de 6h (inclus) à 22h (exclus)
  fi
done`  
Si tu tiens absolument à inclure 6h00 dedans, regarde du côté de date +%M pour obtenir les minutes, et ajuste la condition en fonction.

Edit : Ou tu peux combiner les deux en une seule valeur aussi :

`HEURE="date +%H%M"
if [$HEURE -ge 2200] || [$HEURE -le 0600]; then
  ...`

---

<div class="post-metadata">

**Author:** ![Saachaa](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/48db29/32.png) [@Saachaa](https://www.debian-fr.org/u/Saachaa)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/5 "2016-02-21T03:53:55Z")

</div>

Merci 🙂

Je t’ai MP pour explication

---

<div class="post-metadata">

**Author:** ![Saachaa](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/48db29/32.png) [@Saachaa](https://www.debian-fr.org/u/Saachaa)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/6 "2016-02-21T03:53:55Z")

</div>

Tient, vu que tu me le conseil, tu pourrais me donner une commande pour instaurer une règle dans crontab ?

Sur les forums, ils disent que ce n’est pas possible, qu’il faut obligatoirement passé par

```auto
crontab -e
```

C’est véridique ?

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/7 "2016-02-21T03:53:55Z")

</div>

Honnêtement j’en sais rien vu que je me suis jamais posé cette question. ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green") Le manuel semble suggérer que c’est comme pour visudo : tu dois pouvoir contourner la commande et écrire directement dans les bons fichiers, mais c’est à tes risques et périls et très fortement déconseillé.

> [@man crontab](#):
>
> Un fichier pour chaque utilisateur est disponible dans le répertoire /var/spool/cron/crontabs. Les utilisateurs ne sont pas autorisés à éditer directement les fichiers dans ce répertoire pour s’assurer que seuls les utilisateurs autorisés par le système à avoir des tâches périodiques puissent en ajouter, et que seules des crontab syntaxiquement correctes y soient écrites. Cela est assuré en ayant le répertoire accessible en écriture uniquement par le groupe crontab et en configurant la commande crontab avec le bit setgid pour ce groupe.

---

<div class="post-metadata">

**Author:** ![Saachaa](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/48db29/32.png) [@Saachaa](https://www.debian-fr.org/u/Saachaa)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/8 "2016-02-21T03:53:56Z")

</div>

C’est bien ce que j’ai lu aussi, mais je me suis dis que tu pouvais peut être connaître un tips 😉

Merci de ton aide 🙂

---

<div class="post-metadata">

**Author:** ![lol](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lol/32/15629_2.png) [@lol](https://www.debian-fr.org/u/lol)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/9 "2016-02-21T03:53:57Z")

</div>

Salut,

[quote=“Saachaa”]Tient, vu que tu me le conseil, tu pourrais me donner une commande pour instaurer une règle dans crontab ?

Sur les forums, ils disent que ce n’est pas possible, qu’il faut obligatoirement passé par

```auto
crontab -e
```

C’est véridique ?[/quote]

C’est pas bien, mais je n’utilise jamais crontab -e, j’écris toujours directement dans /etc/cron.d…  
Je ne savais pas que c’était mal… 😊

---

<div class="post-metadata">

**Author:** ![Saachaa](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/48db29/32.png) [@Saachaa](https://www.debian-fr.org/u/Saachaa)\
**Post date:** [Février 21, 2016, 3:53 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/10 "2016-02-21T03:53:58Z")

</div>

Salut lol,

Tant que ça marche 🙂

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/11 "2016-02-21T03:54:03Z")

</div>

Bonsoir,

Je suis étonné qu’un script ait à tourner 24h/24h «&nbsp;en boucle&nbsp;» (à moins qu’il soit un service ? ![:017](https://www.debian-fr.org/uploads/default/original/1X/7bbea83f89515ab7c7a738dddb86c4d4f140bd13.gif "reflechit") )…  
Est-il possible de savoir à quoi il est destiné car selon la réponse, il est possible que des intervenants t’orientent vers des solutions plus appropriées…  
Ou autrement dit : Est-ce des évènements qui déclenchent des traitements (ex : état d’un fichier ou d’un matériel), outre ceux des horaires ?

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/12 "2016-02-21T03:54:08Z")

</div>

[quote=«&nbsp;Totor&nbsp;»]Je suis étonné qu’un script ait à tourner 24h/24h «&nbsp;en boucle&nbsp;» (à moins qu’il soit un service ? ![:017](https://www.debian-fr.org/uploads/default/original/1X/7bbea83f89515ab7c7a738dddb86c4d4f140bd13.gif "reflechit") )…  
Est-il possible de savoir à quoi il est destiné car selon la réponse, il est possible que des intervenants t’orientent vers des solutions plus appropriées…  
Ou autrement dit : Est-ce des évènements qui déclenchent des traitements (ex : état d’un fichier ou d’un matériel), outre ceux des horaires ?[/quote]  
Je l’ai déjà orienté (en MP) vers une solution plus rationnelle (effectivement, un modèle événementiel). 😉  
Au vu de ce qu’il veut faire je ne vois pas trop pourquoi il préfère éviter de l’expliquer «&nbsp;en public&nbsp;» mais ce n’est pas à moi de juger ça…

---

<div class="post-metadata">

**Author:** ![Saachaa](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/48db29/32.png) [@Saachaa](https://www.debian-fr.org/u/Saachaa)\
**Post date:** [Février 21, 2016, 3:54 UTC](https://www.debian-fr.org/t/plage-horaire-en-shell/35018/13 "2016-02-21T03:54:08Z")

</div>

[quote]Je l’ai déjà orienté (en MP) vers une solution plus rationnelle (effectivement, un modèle événementiel). 😉  
Au vu de ce qu’il veut faire je ne vois pas trop pourquoi il préfère éviter de l’expliquer “en public” mais ce n’est pas à moi de juger ça…[/quote]

Je t’expliquerai en MP 🙂
