Contar el número de días del mes actual
DarkBune
Mensajes publicados
215
Fecha de registro
Estado
Miembro
Última intervención
-
tuxboy Mensajes publicados 1083 Estado Miembro -
tuxboy Mensajes publicados 1083 Estado Miembro -
Hola,
me gustaría crear un script que muestre el número de días del mes actual
aquí está mi script
#! /bin/bash
MES=$(date +"%m") case $MES in 01) NOMBRE="enero";; 02)
NOMBRE="febrero";; 03) NOMBRE="marzo";; 04) NOMBRE="abril";; 05) NOMBRE="mayo";; 06) NOMBRE="junio";;
07) NOMBRE="julio";; 08) NOMBRE="agosto";; 09) NOMBRE="septiembre";; 10) NOMBRE="octubre";; 11) NOMBRE="noviembre";; 12) NOMBRE="diciembre"; echo "31 días en "$NOMBRE" "$AÑO;; 04|06|09|11) echo "30 días en "$NOMBRE" "$AÑO;;
02) BISSEXTILIDAD=$(expr $AÑO % 4) if [ $BISSEXTILIDAD != 0 ] then echo "28 días en "$NOMBRE" "$AÑO
else BISSEXTILIDAD=$(expr $AÑO % 100) if [ $BISSEXTILIDAD != 0 ] then echo "29 días en "$NOMBRE" "$AÑO
else BISSEXTILIDAD=$(expr $AÑO % 400) if [ $BISSEXTILIDAD != 0 ] then echo "28 días en "$NOMBRE" "$AÑO
else echo "29 días en "$NOMBRE" "$AÑO fi fi fi;; esac
no entiendo, me muestra un error en la línea 1
Gracias
me gustaría crear un script que muestre el número de días del mes actual
aquí está mi script
#! /bin/bash
MES=$(date +"%m") case $MES in 01) NOMBRE="enero";; 02)
NOMBRE="febrero";; 03) NOMBRE="marzo";; 04) NOMBRE="abril";; 05) NOMBRE="mayo";; 06) NOMBRE="junio";;
07) NOMBRE="julio";; 08) NOMBRE="agosto";; 09) NOMBRE="septiembre";; 10) NOMBRE="octubre";; 11) NOMBRE="noviembre";; 12) NOMBRE="diciembre"; echo "31 días en "$NOMBRE" "$AÑO;; 04|06|09|11) echo "30 días en "$NOMBRE" "$AÑO;;
02) BISSEXTILIDAD=$(expr $AÑO % 4) if [ $BISSEXTILIDAD != 0 ] then echo "28 días en "$NOMBRE" "$AÑO
else BISSEXTILIDAD=$(expr $AÑO % 100) if [ $BISSEXTILIDAD != 0 ] then echo "29 días en "$NOMBRE" "$AÑO
else BISSEXTILIDAD=$(expr $AÑO % 400) if [ $BISSEXTILIDAD != 0 ] then echo "28 días en "$NOMBRE" "$AÑO
else echo "29 días en "$NOMBRE" "$AÑO fi fi fi;; esac
no entiendo, me muestra un error en la línea 1
Gracias
6 respuestas
-
Hola,
En bash es mucho más simple:
El siguiente código:date -d "-$(date +%d) days + 1 month" +%d
muestra la cantidad de días del mes actual.
El comando "date" permite realizar cálculos en lenguaje natural, por ejemplo diciendo « hoy + 1 año + 1 mes - 3 días ».
Para mostrar texto alrededor de este número:date -d "-$(date +%d) days + 1 month" +"%d días en %B"
El funcionamiento del comando presentado es el siguiente:
date +%d
devuelve el día actual (14, para el 14 de octubre).
$(date +%d)
Coloca el día en un número, una variable.
-$(date +%d) days
resta (-) el número (14) de días (days). Para hoy, diría « -14 days ».
date -d "-$(date +%d) days"
Muestra la fecha correspondiente a la fecha actual -14 días. Es decir, el último día del mes anterior.
date -d "-$(date +%d) days + 1 month"
Como queremos el mes actual, hay que añadir un mes.
Aquí se muestra la fecha completa del último día de este mes.
Si solo queremos el día (31, para este mes), añadimos +%d :
date -d "-$(date +%d) days + 1 month" +%d
En otros lenguajes de programación (por ejemplo en JS para mí en este momento), es común hacerlo así: se toma el primer día de un mes dado (1 de octubre), se añade un mes (1 de noviembre) y se resta un día (31 de octubre), y así se obtiene el último día del mes. -
Hola,
¿Tu script aparece tal cual en tu editor de texto?
En lugar de poner un punto y coma (;) entre cada instrucción, al menos pon un retorno de línea, aunque sea por legibilidad ;-(
--
_______________________________ ☯ Zen my nuggets ☮ ______________________________
Haz un gesto por el medio ambiente, cierra tus ventanas y adopta un pingüino… 🐧 -
-
-
Aquí está la respuesta a su pregunta.
Sin embargo, me gustaría poder ingresar una fecha y un mes para obtener una respuesta.
¿Puede ayudarme?
#!/bin/bash
MES=$(date +"%m")
case $MES in
01) NOMBRE="enero";;
02) NOMBRE="febrero";;
03) NOMBRE="marzo";;
04) NOMBRE="abril";;
05) NOMBRE="mayo";;
06) NOMBRE="junio";;
07) NOMBRE="julio";;
08) NOMBRE="agosto";;
09) NOMBRE="septiembre";;
10) NOMBRE="octubre";;
11) NOMBRE="noviembre";;
12) NOMBRE="diciembre";;
esac
AÑO=$(date +"%Y")
case $MES in
01|03|05|07|08|10|12)
echo "31 días en $NOMBRE $AÑO";;
04|06|09|11)
echo "30 días en "$NOMBRE" "$AÑO;;
02)
BISESTRAL=$(expr $AÑO % 4)
if [ $BISESTRAL != 0 ]
then
echo "28 días en "$NOMBRE" "$AÑO
else
BISESTRAL=$(expr $AÑO % 100)
if [ $BISESTRAL != 0 ]
then
echo "29 días en "$NOMBRE" "$AÑO
else
BISESTRAL=$(expr $AÑO % 400)
if [ $BISESTRAL != 0 ]
then
echo "28 días en "$NOMBRE" "$AÑO
else
echo "29 días en "$NOMBRE" "$AÑO
fi
fi
fi
esac
GRACIAS DE ANTEMANO -
Hola,
Solo para hacer una propuesta diferente, puedes probar esto:echo $(cal) | awk '{print $NF}'