El dom, 03-07-2016 a las 12:20 -0400, Hugo Florentino escribió:
> On Fri, 01 Jul 2016 16:14:30 -0400, Alberto José García Fumero wrote:
> > El vie, 01-07-2016 a las 11:24 -0400, Yoandy Madrazo Gómez escribió:
> >> Hay alguna forma de ejecutar un script el primer día laborable de 
> >> cada
> >> mes?? Es para un sistema de salvas con backuppc.
> >>
> >>
> >> Saludos, Yoandy
> >>
> >
> > Guarda en un arreglo del script el listado de los días laborables, y 
> > haz
> > que el script compruebe cada día si la fecha se corresponde... ;-)
> > Digo yo...
> 
> Bueno, esa sería una forma pero realmente no es necesario llenar un 
> arreglo con los días laborales del mes.
> 
> La solución que puse antes no cubría el caso de que el primer día del 
> mes no sea lunes, así que por mero ejercicio intelectual hice el 
> siguiente script:
> 
> #! /bin/sh
> 
> # Obtener el número del día en el mes
> DIAMES=$(expr `date +%d` + 0)
> 
> # Obtener el número del día en la semana, del 1 al 7 (1 es lunes).
> DIASEM=$(expr `date +%u` + 0)
> 
> # Variable para evaluación final
> PRIMERDIALABORAL=0
> 
> # Evaluación para establecer el valor de la variable
> if [ ${DIAMES} -eq 1 ]; then
>    if [ 6 -gt ${DIASEM} ]; then
>      PRIMERDIALABORAL=1
>    fi
> elif [ ${DIAMES} -le 3 ]; then
>    if [ 2 -gt ${DIASEM} ]; then
>      PRIMERDIALABORAL=1
>    fi
> fi
> 
> # Evaluar el valor de la variable
> if [ ${PRIMERDIALABORAL} -eq 1 ]; then
>    echo "Depuración: Este es el primer día laboral del mes."
>    # Insertar aqui las acciones a tomar
> else
>    echo "Depuración: Este no es el primer día laboral del mes."
> fi
> 
> exit 0
> 
> 
> Noten que como mis sistemas no corren bash por defecto sino dash, en lo 
> posible prefiero evitar las comparaciones de igualdad y favorezco las 
> comparaciones por valores numéricos para que mis scripts sean más 
> portables, pero obviamente que esto es una preferencia personal.
> 
> Saludos, Hugo
> 


My mistake!

En realidad quise decir: "guarda en un arreglo del script el listado del
primer día laborable de cada mes" (eso me pasa por estar en varias cosas
a la vez).

Quien dice arreglo puede decir una cadena: un substr o su equivalente
 podría revisar la cadena a ver si el día coincide. Las variantes
dependen solo de nuestra imaginación.

Por ejemplo, en Python, usar una estructura de diccionario.

Conociendo previamente el mes en que estoy (por ejemplo, extrayéndolo
con date), hacer algo como:

dicdias={'enero':4,'febrero':1,'marzo':1}

for labora in dicdias:
  if mes_en_que_estoy=labora:
     este_es=labora[1]
   ...
 
Otra variante, si se nos ocurriera hacer ese script en Python (estoy
explorándolo, y me ha gustado): existe la posibilidad de usar una
estructura similar a la de los ficheros de configuración,
específicamente 

[laborables]
1=4
2=1
3=1
...

guardada en un fichero fechas.cfg, por ejemplo.

En el cuerpo del script se usaría una instrucción
cparser.read(fechas.cfg).

A continuación se recorrería el item laborables con un ciclo:

for labora in cparser.items('laborables'):
   if mes_en_que_estoy=labora:
       este_es=labora[1]
        
con lo cual ya tendría en este_es el primer día laboral del mes.

Una idea como esta abre la posibilidad de crear un script que no
solamente trate el caso señalado (primer día laborable del mes) sino
también otras fechas señaladas, como festivos, sábados laborables
intercambiados por no laborables, etc., a condición de especificar en
cparser.items qué sección debo buscar ('festivos', 'cambiados',
'aniversarios'), la que sea.

El tal script sería lanzado por cron.

"Metí pesca'o!" ;-)

-- 
M.Sc. Alberto García Fumero
Usuario Linux 97 138, registrado 10/12/1998
http://interese.cubava.cu
Una conclusión es el punto en que usted se cansó de pensar.


-- 
Este mensaje ha sido analizado por MailScanner
en busca de virus y otros contenidos peligrosos,
y se considera que est� limpio.


______________________________________________________________________
Lista de correos del Grupo de Usuarios de Tecnologías Libres de Cuba.
Gutl-l@jovenclub.cu
https://listas.jovenclub.cu/cgi-bin/mailman/listinfo/gutl-l

Responder a