Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 10 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Sab Ago 01, 2009 11:00 pm
Mensajes: 27

Nota Publicado: Jue Feb 24, 2011 1:59 pm 
Arriba  
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.

 Perfil Email  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Jue Feb 24, 2011 2:09 pm 
Arriba  
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:
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:
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:
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

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Sab Oct 09, 2004 11:00 pm
Mensajes: 1299

Nota Publicado: Jue Feb 24, 2011 2:14 pm 
Arriba  
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.

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Sab Ago 01, 2009 11:00 pm
Mensajes: 27

Nota Publicado: Jue Feb 24, 2011 4:07 pm 
Arriba  
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

 Perfil Email  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Sab Oct 09, 2004 11:00 pm
Mensajes: 1299

Nota Publicado: Jue Feb 24, 2011 4:16 pm 
Arriba  
¿Estás bromeando, verdad?

¿Lees las respuestas?

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Sab Ago 01, 2009 11:00 pm
Mensajes: 27

Nota Publicado: Vie Feb 25, 2011 2:34 am 
Arriba  
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

 Perfil Email  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Vie Feb 25, 2011 7:27 am 
Arriba  
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

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  

Desconectado
Forista Nuevo
Forista Nuevo
Avatar de Usuario

Registrado: Sab Ago 01, 2009 11:00 pm
Mensajes: 27

Nota Publicado: Vie Feb 25, 2011 9:33 am 
Arriba  
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.

 Perfil Email  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Sab Oct 09, 2004 11:00 pm
Mensajes: 1299

Nota Publicado: Vie Feb 25, 2011 10:36 am 
Arriba  
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.

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Vie Feb 25, 2011 10:50 am 
Arriba  
Citar:
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

--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me...
(from comp.os.linux.misc)
[ DNFD ] - [ F4A ] - [ dotfiles ]

 Perfil Email WWW  
Mostrar mensajes previos:  Ordenar por  
 [ 10 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO