Le nouvel an pour les geeks

Vous réveillonnez chez vous avec vos amis. A l'approche de l'heure fatidique vous dites "on va allumer la TV pour écouter le compte à rebours". Mais 15 minutes avant l'heure fatidique, c'est le drame : coupure de courant dans tout le quartier. Et pas de chance votre GSM ne capte pas de signal.

Mais... Vous avez suivi l'API/casoft, vous êtes sous Linux, la batterie de votre PC portable est chargée à bloc, donc vous pouvez créer un script pour sauver le réveillon !

Question

[5~10 minutes] Commencez par faire un script qui affiche le jour et l'heure une fois par seconde

Indice

Commandes utiles :

  • date

  • sleep

Concepts à utiliser :

  • les boucles (while par exemple)

Solution

1
#! /bin/bash
2
3
while sleep 1 ; do
4
  date
5
done

Question

[Niveau Difficile. En bonus, si vous avez le temps, ~45 minutes] L'année prochaine, vous décidez de ne pas vous faire avoir, vous allez faire un script super génial qui en plus d'afficher l'heure toutes les secondes comme le précédent. Mais lorsqu'il ne reste plus que 10 secondes, va annoncer vocalement le compte à rebours en secondes, et arrivé à zéro dire "Happy new year !"

(pour pouvoir tester votre script, programmez le non pas pour faire le compte à rebours au nouvel an, mais au moment de votre choix)

Indice

Exemple de recherches internet utiles :

Concepts à utiliser :

  • Pour éviter que le synthétiseur vocal ne retarde l'exécution du script, il est possible de le lancer en arrière plan. Cherchez comment lancer une commande linux en arrière plan, et appliquez cela au synthétiseur vocal dans votre script

Conseils méthodologiques :

  • Séparez l'exercice en 2 problèmes distincts : l'affichage de la date que vous avez déjà réussi dans l'exercice précédent, et le compte à rebours vocal de 10 secondes. Vous pouvez faire et tester la fonction du compte à rebours vocal, avant de chercher à l'intégrer au bon moment dans le script.

Indice

Exemple de commande à utiliser :

  • date

  • sleep

  • espeak (ou un autre synthétiseur vocal)

Solution

1
#! /bin/bash
2
3
# installez espeak pour que ce script fonctionne :
4
# apt install espeak
5
6
# fonction pour effectuer vocalement le compte a rebour final
7
function finalcountdown {
8
  # dans cette boucle, la variable "COUNT" va prendre une valeur de 10 à 1 pour faire notre compte à rebours
9
  for COUNT in {10..1} ; do
10
    # lance le synthétiseur en arrière plan avec le chiffre et attend une seconde avant la prochaine itération
11
    espeak "$COUNT" &
12
    sleep 1
13
  done
14
  espeak "Happy new year"
15
}
16
17
# pour éviter de parler 2 fois, on crée une variable...
18
SHOULDSPEAK=1
19
20
while sleep 1 ; do
21
  date
22
23
  # nombre de secondes restantes avant le jour de l'an 2020
24
  SECONDSLEFT="$(( $(date '+%s' -d '1 january 2021 00:00:00' ) - $(date '+%s') ))"
25
26
  # dès qu'il reste moins de 10 seconde, si on a pas déjà parler
27
  if (( $SECONDSLEFT <= 10 && $SHOULDSPEAK )) ; then
28
    SHOULDSPEAK=0
29
30
    # une fois que la boucle est terminée, lance le synthétiseur avec "happy new year"
31
    # en arrière plan, pour que les dates continuent à s'afficher
32
    finalcountdown &
33
  fi
34
done
35