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:
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/bashPor cierto, para el comando date pueden encontrar muchos más formatos de salida consultando su man:
DIA=`date +"%d/%m/%Y"`
HORA=`date +"%H:%M"`
echo "Hoy es el $DIA y la hora actual es $HORA!"
testsrv:~ # man dateAhora 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/bashComo 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.
# 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
Comentarios
Publicar un comentario