Compter le nombre de jours du mois courant [Fermé]

Signaler
Messages postés
184
Date d'inscription
jeudi 12 janvier 2017
Statut
Membre
Dernière intervention
26 novembre 2019
-
Messages postés
994
Date d'inscription
lundi 23 juillet 2012
Statut
Membre
Dernière intervention
28 mai 2019
-
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

Messages postés
4963
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
31 octobre 2019
1 002
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.
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
184
Date d'inscription
jeudi 12 janvier 2017
Statut
Membre
Dernière intervention
26 novembre 2019
1
Bonjour , Merci pour votre superbe explication

quand je lance votre script cela m'affiche cela : "date: date incorrecte "- 14 days + 1 mouth "
Messages postés
4963
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
31 octobre 2019
1 002 >
Messages postés
184
Date d'inscription
jeudi 12 janvier 2017
Statut
Membre
Dernière intervention
26 novembre 2019

Vous l’avez copié-collé ou recopié ?

Dans votre message, vous écrivez "mouth" alors que c’est bien "month".
Messages postés
35681
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
12 octobre 2020
5 529
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é ;-(
Messages postés
184
Date d'inscription
jeudi 12 janvier 2017
Statut
Membre
Dernière intervention
26 novembre 2019
1
Salut oui , je le fais avec la commande "nano" sinon vous avez remarquer une erreur ? Merci
Messages postés
35681
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
12 octobre 2020
5 529 >
Messages postés
184
Date d'inscription
jeudi 12 janvier 2017
Statut
Membre
Dernière intervention
26 novembre 2019

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 ;-\
Messages postés
184
Date d'inscription
jeudi 12 janvier 2017
Statut
Membre
Dernière intervention
26 novembre 2019
1


Jai cette erreur
Messages postés
184
Date d'inscription
jeudi 12 janvier 2017
Statut
Membre
Dernière intervention
26 novembre 2019
1





=> mon editeur
Messages postés
35681
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
12 octobre 2020
5 529
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).
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
Messages postés
1151
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
142
Salut,

Ben suffit de le demander en début de script (commande "
read
") plutôt que le l'inscrire en dur.
>
Messages postés
1151
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019

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!!!
Messages postés
994
Date d'inscription
lundi 23 juillet 2012
Statut
Membre
Dernière intervention
28 mai 2019
154
Bonjour,

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