Compter le nombre de jours du mois courant

DarkBune Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   -  
tuxboy Messages postés 1083 Statut Membre -
Bonjour,

j'aimerai créer un script qui affichera le nombre de jours du mois courant
voici mon script

#! /bin/bash

MOIS=$ (date +"%m") case $MOIS in 01) NOM="janvier";; 02)
NOM="fevrier";; 03) NOM="mars";; 04) NOM="avril";; 05) NOM="mai";; 06) NOM="juin";;
07) NOM)"juillet";; 08) NOM="aout";; 09) NOM="septembre";; 10) NOM="octobre";; 11) NOM="novembre";; 12) NOM="de$
echo "31 jours en "$NOM" "$ANNEE;; 04|06|09|11) echo "30 jours en "$NOM" "$ANNEE;;
02) BISSEXTILITE=$(exp $ANNEE %4) if [ $BISSEXTILITE != 0] then echo "28 jours en "$NOM" "$ANNE
else BISSEXTILITE=$(expr $ANNE %100) if [ $BISSEXTILITE !=0] then echo "29 jours en "$NOM" "*ANNE
else BISSEXTILITE=$(expr $ANNE %400) if [ $BISSEXTILITE !=0] then echo "28 jours en "$NOM" "$ANNEE
else echo "29 jours en "$NOM" "$ANNEE fi fi fi;; esac

je comprends pas , il m'affiche une erreur ligne 1

Merci

6 réponses

  1. le hollandais volant Messages postés 5294 Statut Membre 1 059
     
    Bonjour,

    En bash il y a beaucoup plus simple :

    Le code suivant :
    date -d "-$(date +%d) days + 1 month" +%d


    affiche le nombre de jours du mois courant.
    La commande "date" permet de faire des calculs en langage naturel, par exemple en disant « aujourd’hui + 1 an + 1 mois − 3 jours ».

    Pour afficher du texte autour de ce chiffre :
    date -d "-$(date +%d) days + 1 month" +"%d jours dans %B"


    Le fonctionnement de la commande présente est le suivant :

    date +%d

    retourne le jour actuel (14, pour le 14 octobre).

    $(date +%d)

    Place le jour dans un nombre, une variable.

    -$(date +%d) days 

    retire (-) le nombre (14) de jours (days). Pour aujourd’hui, ça mettrait « -14 days ».

    date -d "-$(date +%d) days"

    Affiche la date correspondant à la date actuelle -14 jours. Soit le dernier jour du mois précédent.

    date -d "-$(date +%d) days + 1 month"

    Comme on veut le mois courant, il faut ajouter un mois.
    Ici on affiche la date complète du dernier jour de ce mois.

    Si on ne veut que le jour (31, pour ce mois-ci), on ajoute +%d :

    date -d "-$(date +%d) days + 1 month" +%d


    Dans d’autres langages de prog (par exemple en JS pour moi en ce moment), il est courant de faire comme ça : on prend le premier jour d’un mois donné (1 octobre), on ajoute un mois (1 novembre) et on retire un jour (31 octobre), et l’on dispose alors du dernier jours du mois.
    4
    1. DarkBune Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   9
       
      Bonjour , Merci pour votre superbe explication

      quand je lance votre script cela m'affiche cela : "date: date incorrecte "- 14 days + 1 mouth "
      0
      1. le hollandais volant Messages postés 5294 Statut Membre 1 059 > DarkBune Messages postés 215 Date d'inscription   Statut Membre Dernière intervention  
         
        Vous l’avez copié-collé ou recopié ?

        Dans votre message, vous écrivez "mouth" alors que c’est bien "month".
        0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Ton script apparaît tel quel dans ton éditeur de texte ?

    À défaut de mettre un point virgule (;) entre chaque instruction, mettre au moins un retour à la ligne, ne serait-ce que pour la lisibilité ;-(
    0
    1. DarkBune Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   9
       
      Salut oui , je le fais avec la commande "nano" sinon vous avez remarquer une erreur ? Merci
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > DarkBune Messages postés 215 Date d'inscription   Statut Membre Dernière intervention  
         
        Non parce que c'est illisible et indigeste.

        Mets ça en forme et repostes ton code entre les balises
        <code>
        </code>
        et après on avisera ;-\
        0
  3. DarkBune Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   9
     


    Jai cette erreur
    0
  4. DarkBune Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   9
     


    => mon editeur
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Comme dit plus haut, chaque instruction doit être sur une ligne différente ou séparée par un point virgule (;) !

      Il ne faut pas d'espace entre "$" et "(" (source de la 1ère erreur).
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. djacidj
     
    Voici la réponse à votre question.

    Par contre j'aimerais pouvoir entrer une date et un mois afin d'avoir un retour.

    Pouvez-vous m'aider?


    #!/bin/bash
    MOIS=$(date +"%m")
    case $MOIS in
    01) NOM="janvier";;
    02) NOM="fevrier";;
    03) NOM="mars";;
    04) NOM="avril";;
    05) NOM="mai";;
    06) NOM="juin";;
    07) NOM="juillet";;
    08) NOM="aout";;
    09) NOM="septembre";;
    10) NOM="octobre";;
    11) NOM="novembre";;
    12) NOM="decembre";;
    esac
    ANNEE=$(date +"%Y")
    case $MOIS in
    01|03|05|07|08|10|12)
    echo "31 jours en $NOM $ANNEE";;
    04|06|09|11)
    echo "30 jours en "$NOM" "$ANNEE;;

    02)
    BISSEXTILITE=$(expr $ANNEE % 4)
    if [ $BISSEXTILITE != 0 ]
    then
    echo "28 jours en "$NOM" "$ANNEE
    else
    BISSEXTILITE=$(expr $ANNEE % 100)
    if [ $BISSEXTILITE != 0 ]
    then
    echo "29 jours en "$NOM" "$ANNEE
    else
    BISSEXTILITE=$(expr $ANNEE % 400)
    if [ $BISSEXTILITE != 0 ]
    then
    echo "28 jours en "$NOM" "$ANNEE
    else
    echo "29 jours en "$NOM" "$ANNEE
    fi
    fi
    fi

    esac



    MERCI D'AVANCE
    0
    1. UnGnU Messages postés 1468 Statut Contributeur 158
       
      Salut,

      Ben suffit de le demander en début de script (commande "
      read
      ") plutôt que le l'inscrire en dur.
      0
      1. djacidj > UnGnU Messages postés 1468 Statut Contributeur
         
        Merci pour votre réponse, pourriez-vous me montrer un exemple car j'ai pas mal de difficulté en script Linux lol

        Merci d'avance!!!
        0
  7. tuxboy Messages postés 1083 Statut Membre 190
     
    Bonjour,

    Juste pour faire une proposition différente, tu peux essayer ça :
    echo $(cal) | awk '{print $NF}'
    0