From Paul WOISARD, 2 Years ago, written in Bash.
This paste is a reply to Quel-Jour.sh from Paul WOISARD
- view diff
Embed
  1. #!/bin/bash
  2. clear #Pour y voir plus clair.
  3.  
  4. echo "Vous voulez savoir le jour d'une date donnée à partir du 1er Janvier 1900, ce petit script est fait pour vous"
  5. echo ""
  6. echo "On va vous demander d'abord le jour, puis le mois et finalement l'année (en chiffre) :"
  7.  
  8. j=0 #Initialisation d'une Variable.
  9. TESTinit=$(echo "$j == 1544654210" | bc) #Initialisation d'un opération logique qui sert à savoir si la personne va rentrer un jour existant.
  10.  
  11. until [ $TESTinit -eq 1 ] #Tant que le jour rentré n'existe pas".
  12. do
  13. echo ""
  14. echo -n "Quel Jour ? " #On demande le jour
  15. read j
  16. until [ $j -ge 1 ] && [ $j -le 31 ] #Premier test pour voir si le jour peut exister (s'il est bien entre le 1 et le 31).
  17. do
  18.     echo "Il faut taper le jour en chiffre et sous le format xx!! Et compris en 01 et 31 Pas $j"
  19.     echo -n "Quel Jour ? " #Le jour est à nouveau demandé au cas où.
  20.     read j
  21. done
  22.  
  23. echo "OK" #Jour semble Bon.
  24.  
  25. echo -n "Quel Mois ? " #On demande le mois
  26. read m
  27.  
  28. until [ $m -ge 1 ] && [ $m -le 12 ] #Vérification si le mois est compris entre le 1 et le 12.
  29. do
  30.     echo "Il faut taper le mois en chiffre et sous le format xx!! Et compris en 01 et 12. Et pas $m"
  31.     echo -n "Quel Mois ? " #Le mois est à nouveau demandé au cas où.
  32.     read m
  33. done
  34.  
  35. echo "OK"
  36.  
  37. echo -n "Quel année ? " #On demande l'année
  38. read a
  39.  
  40. until [[ "${a}" =~ ^[-+]?[0-9]+$ ]] && [ $a -ge 1900 ] #Vérification si l'année est un nombre et si l'année est supérieur ou égale à 1900
  41. do
  42.     echo "Il faut taper l'année en chiffre et sous le format xxxx!! et supérieur ou égal çà 1900. Et pas $a"
  43.     echo -n "Quel année ? " #L'année est à nouveau demandée au cas où.
  44.     read a
  45. done
  46.  
  47. case "$m" in #Test si le mois a différente valeur.
  48.         "2" | "02" ) #Si le mois vaut 2.
  49.         divaa=$(echo "$a/100" | bc -l)
  50.         let "divab = $a/100"
  51.         divab=$(echo "$divab*1.00000000000000000000" | bc)
  52.         TESTa=$(echo "$divaa==$divab" | bc) #Permet de vérifier si l'année est un multiple de 100
  53.    
  54.         divba=$(echo "$a/400" | bc -l)
  55.         let "divbb = $a/400"
  56.         divbb=$(echo "$divbb*1.00000000000000000000" | bc)
  57.         TESTb=$(echo "$divba!=$divbb" | bc) #Permet de vérifier si l'année n'est pas un multiple de 400
  58.        
  59.         divca=$(echo "$a/4" | bc -l)
  60.         let "divcb = $a/4"
  61.         divcb=$(echo "$divcb*1.00000000000000000000" | bc)
  62.         TESTc=$(echo "$divca==$divcb" | bc) #Permet de vérifier si l'année est un multiple de 4
  63.        
  64.         if [ $TESTa -eq 1 ] && [ $TESTb -eq 1 ] #Sert à déterminer si durant l'année rentré il y a eu un 29 février
  65.         then
  66.             vnf="28"
  67.         elif [ $TESTc -eq 1 ]
  68.         then
  69.             vnf="29"
  70.         else
  71.             vnf="28"
  72.         fi
  73.        
  74.         TESTinit=$(echo "$j <= $vnf" | bc) ;; #On sort de la première boucle si la date existe
  75.        
  76.         "4" | "04" | "6" | "06" | "9" | "09" | "11" )
  77.         TESTinit=$(echo "$j <= 30" | bc) ;; #On sort de la première boucle si la date existe
  78.         "1" | "01" | "3" | "03" | "5" | "05" | "7" | "07" | "8" | "08" | "10" | "12" )
  79.         TESTinit=$(echo "$j <= 31" | bc) ;; #On sort de la première boucle si la date existe
  80.         *)  ;;
  81. esac
  82.  
  83. if [ $TESTinit -ne 1 ]
  84. then
  85.     echo "...Il faut entrer une date existante" #Message affiché si la date n'existe pas
  86. fi
  87.  
  88. done
  89.  
  90. echo "OK"
  91.  
  92. let "an = $a - 1900" #Première Étape pour calculer le nombre de jour depuis le 1 janvier 1900.
  93.  
  94. let "bix = $an/4"  #Plein de calcul pour additionner les 29 février des années bissextiles.
  95.  
  96. bix=${bix#-}
  97.  
  98. let "bix = $bix+1"
  99.  
  100. ane=${an#-}
  101.  
  102. ann=$(echo "($ane/4)+1" | bc -l)
  103.  
  104. bixe=$(echo "$bix*1.00000000000000000000" | bc)
  105.  
  106. for ((i = 1900 ; i <= $a ; i += 4))
  107. do
  108.     let "z=$i"
  109.     divaa=$(echo "$z/100" | bc -l)
  110.     let "divab = $z/100"
  111.     divac=$(echo "$divab*1.00000000000000000000" | bc)
  112.     TESTa=$(echo "$divaa==$divac" | bc)
  113.  
  114.    
  115.     divba=$(echo "$z/400" | bc -l)
  116.     let "divbb = $z/400"
  117.     divbc=$(echo "$divbb*1.00000000000000000000" | bc)
  118.     TESTb=$(echo "$divba!=$divbc" | bc)
  119.    
  120.     if [ $TESTa -eq 1 ] && [ $TESTb -eq 1 ]
  121.     then
  122.         let "bix = $bix-1"
  123.     fi
  124. done
  125.  
  126. divaa=$(echo "$a/100" | bc -l)
  127. let "divab = $a/100"
  128. divab=$(echo "$divab*1.00000000000000000000" | bc)
  129. TESTa=$(echo "$divaa!=$divab" | bc)
  130.    
  131. divba=$(echo "$a/400" | bc -l)
  132. let "divbb = $a/400"
  133. divbb=$(echo "$divbb*1.00000000000000000000" | bc)
  134. TESTb=$(echo "$divba==$divbb" | bc)
  135.  
  136. TEST=$(echo "$ann==$bixe" | bc)
  137.  
  138. if [ $TESTb -eq 1 ]
  139. then
  140.     let "bix = $bix-1"
  141. elif [ $TESTa -eq 1 ] && [ $TEST -eq 1 ] && [ $m -lt 3 ]
  142. then
  143.     let "bix = $bix-1"
  144. fi
  145.  
  146. #On a le nombre de 29 février depuis le 1er Janvier 1900 à la date choisie.
  147.  
  148. case "$m" in #Sert à déterminer le nombre de jour depuis le 1er janvier de l'année choisie au 1er jour du mois choisi et convertie la valeur numérique du mois en chaînes de caractères.
  149.         "1" | "01" ) let "jpm = 0"
  150.               mois="Janvier"     ;;
  151.         "2" | "02" ) let "jpm = 31"
  152.               mois="Février"     ;;
  153.         "3" | "03" ) let "jpm = 59"
  154.               mois="Mars"        ;;
  155.         "4" | "04" ) let "jpm = 90"
  156.               mois="Avril"       ;;
  157.         "5" | "05" ) let "jpm = 120"
  158.               mois="Mai"         ;;
  159.         "6" | "06" ) let "jpm = 151"
  160.               mois="Juin"        ;;
  161.         "7" | "07" ) let "jpm = 181"
  162.               mois="Juillet"     ;;
  163.         "8" | "08" ) let "jpm = 212"
  164.               mois="Août"        ;;
  165.         "9" | "09" ) let "jpm = 243"
  166.               mois="Septembre"   ;;
  167.         "10") let "jpm = 273"
  168.               mois="Octobre"    ;;
  169.         "11") let "jpm = 304"
  170.               mois="Novembre"   ;;
  171.         "12") let "jpm = 334"
  172.               mois="Décembre"   ;;
  173.         *) echo "pb" ;;
  174. esac
  175.  
  176. case "$j" in #Change le format du jour
  177.         "1" | "01" ) let "d = 1" ;;
  178.         "2" | "02" ) let "d = 2" ;;
  179.         "3" | "03" ) let "d = 3" ;;
  180.         "4" | "04" ) let "d = 4" ;;
  181.         "5" | "05" ) let "d = 5" ;;
  182.         "6" | "06" ) let "d = 6" ;;
  183.         "7" | "07" ) let "d = 7" ;;
  184.         "8" | "08" ) let "d = 8" ;;
  185.         "9" | "09" ) let "d = 9" ;;
  186.         *) let "d = $j" ;;
  187. esac
  188.  
  189.  
  190. let "NbJoursTotals = $an * 365 + $bix + $jpm + $d" #Calcul le Nombre total de jour entre le 1er janvier 1900 à la date choisie.
  191.  
  192. echo "Nombre de jours entre la date entrée et le 1er Janvier 1900 est de $NbJoursTotals" #Sort la valeur précédemment calculée.  
  193.  
  194. while [ $NbJoursTotals -gt 7 ] #Sert à déterminer le jour (sous format numérique).
  195. do
  196. let "NbJoursTotals = $NbJoursTotals - 7"
  197. done
  198.  
  199. case "$NbJoursTotals" in #Convertie le Jour numérique en toute lettre.
  200.         "1" ) d="Lundi" ;;
  201.         "2" ) d="Mardi" ;;
  202.         "3" ) d="Mercredi" ;;
  203.         "4" ) d="Jeudi" ;;
  204.         "5" ) d="Vendredi";;
  205.         "6" ) d="Samedi" ;;
  206.         "7" ) d="Dimanche" ;;
  207.         *) echo "pb" ;;
  208. esac
  209.  
  210. echo "La date que vous avez entrée est le $d $j $mois $a" #valeur de Sortie
  211.  
  212.