|
Ver temas sin respuesta | Ver temas activos
Foros Linux » Desarrollo » Programación
Página 1 de 1
|
[ 10 mensajes ] |
|
| Autor |
Mensaje |
tuato

Forista Nuevo
Registrado: Sab Ago 01, 2009 11:00 pm Mensajes: 27
|
 Publicado: Jue Feb 24, 2011 1: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.
|
|
|
|
 |
niky45

Forista Ancestral
Registrado: Mié Abr 11, 2007 11:00 pm Mensajes: 8550 Ubicación: tras la pantalla (...)
|
 Publicado: Jue Feb 24, 2011 2: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: 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. ) 
_________________ #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 ]
|
|
|
|
 |
neurus

Forista Distinguido
Registrado: Sab Oct 09, 2004 11:00 pm Mensajes: 1299
|
 Publicado: Jue Feb 24, 2011 2: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.
|
|
|
|
 |
tuato

Forista Nuevo
Registrado: Sab Ago 01, 2009 11:00 pm Mensajes: 27
|
 Publicado: Jue Feb 24, 2011 4:07 pm |
|
|
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
|
|
|
|
 |
neurus

Forista Distinguido
Registrado: Sab Oct 09, 2004 11:00 pm Mensajes: 1299
|
 Publicado: Jue Feb 24, 2011 4:16 pm |
|
|
¿Estás bromeando, verdad?
¿Lees las respuestas?
|
|
|
|
 |
tuato

Forista Nuevo
Registrado: Sab Ago 01, 2009 11:00 pm Mensajes: 27
|
 Publicado: Vie Feb 25, 2011 2: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
|
|
|
|
 |
niky45

Forista Ancestral
Registrado: Mié Abr 11, 2007 11:00 pm Mensajes: 8550 Ubicación: tras la pantalla (...)
|
 Publicado: Vie Feb 25, 2011 7:27 am |
|
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.... (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. *nota: para poner el ejemplo TAMBIEN lo he tenido que pensar. casi lo pongo al reves. ) 
_________________ #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 ]
|
|
|
|
 |
tuato

Forista Nuevo
Registrado: Sab Ago 01, 2009 11:00 pm Mensajes: 27
|
 Publicado: Vie Feb 25, 2011 9:33 am |
|
|
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.
|
|
|
|
 |
neurus

Forista Distinguido
Registrado: Sab Oct 09, 2004 11:00 pm Mensajes: 1299
|
 Publicado: Vie Feb 25, 2011 10:36 am |
|
|
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.
|
|
|
|
 |
niky45

Forista Ancestral
Registrado: Mié Abr 11, 2007 11:00 pm Mensajes: 8550 Ubicación: tras la pantalla (...)
|
 Publicado: Vie Feb 25, 2011 10:50 am |
|
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 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  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 ]
|
|
|
|
 |
|
|
|
Página 1 de 1
|
[ 10 mensajes ] |
|
¿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
|
|