Script bash para identificar el último día del mes

El caso de hoy lo he utilizado en un montón de scripts programados para realizar copias de seguridad, donde lo uso para determinar si el día en curso es el último día del mes, a fin de generar copias históricas mensuales que coincidan con cortes financieros, contables, etc.

Para identificar el último día del mes en un script bash es fundamental manejar el comando date, ya que dicho comando nos provee la información actual relacionada a la fecha, hora, semana, etc., y por supuesto, el último día del mes como se verá más adelante.

Vamos a comenzar por ver de forma sencilla como se utiliza el comando date para obtener el día y la hora actual en un script para luego mostrarla en pantalla, el ejemplo va a continuación:
#!/bin/bash
DIA=`date +"%d/%m/%Y"`
HORA=`date +"%H:%M"`

echo "Hoy es el $DIA y la hora actual es $HORA!"
Por cierto, para el comando date pueden encontrar muchos más formatos de salida consultando su man:
testsrv:~ # man date
Ahora bien, el problema para detectar el día de fin de mes es que no es el mismo número de día para todos los meses, febrero culmina con el día 28 o a veces con el 29, en diciembre el fin de mes cae el día 31 pero en setiembre el 30. La forma más apropiada y dinámica que he encontrado para resolver este problema se puede ver en el siguiente ejemplo:
#!/bin/bash
# Obteniendo el mes en letras

MES=`date +"%B"`

# Detectando fin de mes y mostrando en pantalla.
TOMORROW=`date --date=tomorrow +%d`
if [ $TOMORROW -eq "1" ]; then
echo "ALERTA: Hoy es el último día de $MES!"
fi
Como se puede observar, ejecutando el comando date seguido del argumento --date=tomarrow +%d (que por cierto no aparece en el man, creo) se obtiene el número del día de mañana, que es guardado en una variable. Luego el contenido de la variable se compara con el número que esperamos que sea el día de mañana, que en el ejemplo es el día primero (1) del mes siguiente, y si cumple la condición hacemos lo que necesitamos hacer.

Comentarios