Problema con script para comando Cron.

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
tuato
Forista Nuevo
Forista Nuevo
Mensajes: 29
Registrado: Dom Ago 02, 2009 7:00 am

Problema con script para comando Cron.

Mensaje por tuato » Jue Feb 24, 2011 9:59 pm

Hola, lo primero perdonar porque soy algo novato en esto de la programación y quizás suene a risa lo que voy a preguntar. Estoy haciendo un script para automatizar las tareas Cron, es decir, el usuario inicia el script y este le pide que introduzca el día, la hora, el mes etc... luego el script tenga todos los datos ejecutara la tarea Cron. Bien, parece que no he empezado con buen pie, porque en la primera pregunta que hace el script (minuto) al ejecutarlo me sale esto:

Bienvenido al creador de tareas programadas con Cron
Por favor introduzca los datos requeridos
Minuto en el que se realizara la tarea 0-59:
66
tareascron.sh: 21: minuto: not found
Valor correcto

No entiendo porque me sale esa linea de tareascron.sh:21minuto:not found
ya que he metido 66 a propósito para que me salga un mensaje de error. Este es el código que he escrito:

echo "Minuto en el que se realizara la tarea 0-59:"

read minuto

if minuto > 59;
then
echo "Error, introduzca un valor de 0 a 59"
else echo "Valor correcto"
fi


Supongo que habrá un fallo del copon en algo, pero no soy capaz de descifrarlo. Espero que me podáis ayudar, gracias.
Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: Problema con script para comando Cron.

Mensaje por niky45 » Jue Feb 24, 2011 10:09 pm

esto.... tu idea era programarlo en bash, verdad??

lo digo porque eso es cualquier cosa menos bash. la sintaxis para lo que quieres hacer, es esta:

Código: Seleccionar todo

read minuto

if [ $minuto > 59 ]; then 
  echo "error"
else 
  echo "ok"
fi
por cierto, te aconsejo este codigo, es mucho mas limpio (evita errores)

Código: Seleccionar todo

read minuto

while [ $minuto > 59 ]; do 
  echo "entrada incorrecta"
  read minuto
done

echo "ok"
...
este seguira preguntando hasta que la entrada sea correcta... (por cierto... ten cuidado con los numeros negativos !!)

la doble condicion iria asi:

Código: Seleccionar todo

if [ $minuto > 59 ] || [ $minuto < 0 ]; then 
  #resto
  #la del while es identica.
PD: algo que te va a venir muy bien: http://www.etxea.net/docu/taller_bash/bash.html yo aprendi bash con esta guia. (luego se queda un poco corta, y entonces es donde empiezas a usar el man... pero para empezar, es una guia excelente. ) :D
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1805
Registrado: Dom Oct 10, 2004 7:00 am

Re: Problema con script para comando Cron.

Mensaje por neurus » Jue Feb 24, 2011 10:14 pm

Edit: Niky se me adelantó, y sin leer el post, sé que te pasó algún manual. Léelo.
tuato escribió:
if minuto > 59;
Lo que estás haciendo acá es enviar la palabra minuto al archivo 59 (mira el directorio en que lo estás ejecutando, que seguro está el archivo).

Por lo tanto, la condición siempre es verdadera. Además, las variables se llaman anteponiendo el signo pesos. Y read se escribe: read -p "texto a mostrar" VARIABLE.


En fin, busca un manual de bash.

Nuevo edit: No sé qué le pasó a Niky (porque me consta que esto lo sabe) pero los signos < y > no comparan en bash, sino que redirigen la salida standard. Lo que quieres usar es -lt . Pero insisto: lee un manual de bash, para que al menos entiendas las respuesta que puedan darte en el foro.
Avatar de Usuario
tuato
Forista Nuevo
Forista Nuevo
Mensajes: 29
Registrado: Dom Ago 02, 2009 7:00 am

Re: Problema con script para comando Cron.

Mensaje por tuato » Vie Feb 25, 2011 12:07 am

Parece ser que hay algo que no funciona en este script, he usado la opción del while, y después de introducir un numero menor de 59, me sale esto:

Minuto en el que se realizara la tarea 0-59:
34
entrada incorrecta
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1805
Registrado: Dom Oct 10, 2004 7:00 am

Re: Problema con script para comando Cron.

Mensaje por neurus » Vie Feb 25, 2011 12:16 am

¿Estás bromeando, verdad?

¿Lees las respuestas?
Avatar de Usuario
tuato
Forista Nuevo
Forista Nuevo
Mensajes: 29
Registrado: Dom Ago 02, 2009 7:00 am

Re: Problema con script para comando Cron.

Mensaje por tuato » Vie Feb 25, 2011 10:34 am

Esta es la solución que he encontrado:

echo "Minuto en el que se realizara la tarea 0-59:"

read minuto

if [ $minuto -gt 59 ];
then
echo "Error, introduzca un valor menor de 60"
read minuto
fi
if [ $minuto -lt 60 ];
then
echo "OK"
fi
Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: Problema con script para comando Cron.

Mensaje por niky45 » Vie Feb 25, 2011 3:27 pm

neurus escribió:
Nuevo edit: No sé qué le pasó a Niky (porque me consta que esto lo sabe) pero los signos < y > no comparan en bash, sino que redirigen la salida standard. Lo que quieres usar es -lt . Pero insisto: lee un manual de bash, para que al menos entiendas las respuesta que puedan darte en el foro.
OSTRAS!!!! despistes gordos he tenido, pero tanto como ese, hacia mucho que no caia.... :shock: :shock:
(gracias por recordarlo)

en cuanto a la solucion planteada por tuato, aunque valida (aka, funciona), pero.... existiendo el else, es un poco bestia.

por que no funciona mi while ?? (dejando de lado mi monumental despiste). echale un ojo a la condicion... a ver si la he puesto al reves. :? (yo con los mayores y menores siempre acabo haciendome un lio y poniendo algo como esto:

until [ ! $var > 59 ]; do ...

aka, si, una burrada. luego repasando el codigo ya lo corrijo... pero a la primera se me suele ir. supongo que porque no tengo del todo claro lo que estoy haciendo. :P

*nota: para poner el ejemplo TAMBIEN lo he tenido que pensar. casi lo pongo al reves. :cry: )
:)
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]
Avatar de Usuario
tuato
Forista Nuevo
Forista Nuevo
Mensajes: 29
Registrado: Dom Ago 02, 2009 7:00 am

Re: Problema con script para comando Cron.

Mensaje por tuato » Vie Feb 25, 2011 5:33 pm

El caso es que si en vez de hacerlo asi, uso el ELSE no me funciona, no se porque, no encuentro explicacion posible, pero asi es.

Y respecto al que me ha dicho a ver si leo las respuestas, pues decirle que tengo costumbre de ello y que no hace falta ponerse asi por preguntar algo, pense que en los foros de linux la gente era mas considerada con los novatos.
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1805
Registrado: Dom Oct 10, 2004 7:00 am

Re: Problema con script para comando Cron.

Mensaje por neurus » Vie Feb 25, 2011 6:36 pm

No te funciona con else, porque deberías usar if anidados para hacer lo mismo.
else
if ...etc
fi
fi

En cuanto a mi respuesta anterior, considero irrespetuoso hacer una pregunta para no leer las respuestas. Esto no tiene que ver con ser novato, sino con ser educado. Es increíble cómo suele usarse la característica de "novato" como arma todoterreno para comportarse incivilizadamente.

E inmediatamente después de que te respondí que era un error usar ">", vienes y posteas que el script no te funciona, precisamente por seguir usando el redireccionador. Eso, en mi planeta, es no leer las respuestas.
Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: Problema con script para comando Cron.

Mensaje por niky45 » Vie Feb 25, 2011 6:50 pm

El caso es que si en vez de hacerlo asi, uso el ELSE no me funciona, no se porque, no encuentro explicacion posible, pero asi es.
puedes pegar el codigo?? (exacto)

hay una cosa: bash tiene una sintaxis dada. a veces no vemos el error... pero lo cierto es que si no hay un error, funciona. no me preguntes por que :P

PD: para codigo, en favor de la legibilidad, utiliza la etiqueta [ code] (has usado negritas, asi que tienes que verlo... tres mas a la dereca esta "code"), porque es mucho mas sencillo ver el codigo bien presentado que no "formateado" (ver el codigo con letra de ancho variable, a mi me hace danio a la vista :P por no contar el tema de la indentacion. yo sin indentacion me cuetsa el doble averiguar como funciona algo. :? )
:)
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje