Error de sintaxis (solucionado)

Imagen de delmo
0 puntos

Hola a todos/as:

Estoy empezando con los scripts y tengo algun problemilla. Estoy realizando un curso y en el ordenador del curso con red hat me funcionan los scripts, y los mismos no me funcionan en mi ubuntu 7.10. Ambos utilizan como predeterminado el shell bash y no se que pasa. Os pongo el script. Es muy sencillo y como os digo en red hat me funciona. ¿QUE PUEDO HACER PARA QUE ME FUNCIONEN EN UBUNTU?

El enunciado del script es este:

  1. Crear un Script en Bourne-Shell que permita introducir el nombre de un fichero como parámetro. Si existe dicho fichero, visualizar sus atributos; en caso contrario, visualizar un mensaje indicando que no existe. Repetir el proceso hasta que el usuario conteste que no a la pregunta ¿Desea introducir otro fichero?

 

(el ejercicio es para Bourne Shell. Por tanto el archivo se llama prueba.sh y lo ejecuto asi: sh prueba sh (parametro)

Y este es el script que he realizado y que en ubuntu no me funciona.

#propuestos 1 shell
if [ -f $1 ]
then
echo "\n Los atributos son:"
ls -l $1
else
echo "\n El fichero no existe!"
fi
opcion='s'
until [ $opcion='n' ]
do
echo "\n Desea ver otro archivo? s/n \c"
read opcion
while [ $opcion='s' ]
do
echo "\n Nuevo fichero: \c"
read nuevo
if [ -f $nuevo ]
then
echo "\n Los atributos son:"
ls -l $nuevo
$opcion='n'
else
echo "\n El fichero no existe!"
echo "\n Desea ver otro fichero? s/n \c"
read opcion
fi
done
done
echo "\n FIN DEL PROCESO"

GRACIAS DE ANTEMANO A TODOS/AS

Imagen de joseluis
+1
0
-1

¿Qué error te da?, porque acabo de hacerlo ahora en un Ubuntu 7.10 (haciendo un copy-paste de tu código) y funciona sin problemas tanto cuando lo ejecuto con sh prueba.sh unfichero como si lo ejecuto sin parámetro sh prueba.sh.

Tampoco parece un problema de permisos de ejecución porque al ejecutarlo con sh por delante no los necesita.


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

+1
0
-1

Imagen de delmo
+1
0
-1

Gracias Jose Luis por responder,

El error que me da es que solo me ejecuta la condicion if. El como si el bash pasara por alto la definicion de la variable "opcion" y no hace nada desde el while en adelante. Lo curioso es que el bash no me responde con ningun mensaje de error.

Ahora que me quedo alucinado de que a ti si te funcione.... ahora si que no entiendo nada.. y mira que he leido de todo en internet para ver que sucede.

Yo lo ejecuto como lo has puesto tu y no me funciona.

Con otros scripts tampoco me reconoce las funciones.

Sera un error del bash?.. ¿se puede reinstalar?

GRACIAS

+1
0
-1
Imagen de joseluis
+1
0
-1

Disculpa, pero ha sido un error mío. No me dí cuenta del bucle que tenías en el script pidiendo si querías hacer otra consulta. Al ejecutarlo como me salían datos pensaba que eso era todo y por eso lo dí por bueno :(

El problema lo tienes en las sentencias until y while ya que tienes que meter un espacio antes y después del igual, es decir tú tienes:

until [ $opcion='n' ]

y debería ser

until [ $opcion = 'n' ]

Lo tienes que hacer igual con el while.
Además la línea

$opcion='n'

es incorrecta, debería ser

opcion='n'

Si no me he equivocado al transcribirlo debería quedarte el script así:

#propuestos 1 shell
if [ -f $1 ]
then
  echo "\n Los atributos son:"
  ls -l $1
else
  echo "\n El fichero no existe!"
fi
opcion='s'
until [ $opcion = 'n' ]
do
  echo "\n Desea ver otro archivo? s/n \c"
  read opcion
  while [ $opcion = 's' ]
  do
    echo "\n Nuevo fichero: \c"
    read nuevo
    if [ -f $nuevo ]
    then
      echo "\n Los atributos son:"
      ls -l $nuevo
      opcion='n'
    else
      echo "\n El fichero no existe!"
      echo "\n Desea ver otro fichero? s/n \c"
      read opcion
    fi
  done
done
echo "\n FIN DEL PROCESO"


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

+1
0
-1

Imagen de delmo
+1
0
-1

Gracias Jose Luis,

he hecho las correciones dejando los espacios y quitando el $ pero sigue igual.

Algo que no entiendo es que donde pongo:

opcion='s' las tildes me apecen en amarillo y la n en rojo

pero en until [ $opcion = 'n' ] las tildes estan en roj, igual que la n.

es como si no las interpretara bien el vi, o que realmente lo pongo mal.

A ti te funciona el script completo con esas correcciones? 

+1
0
-1
Imagen de joseluis
+1
0
-1

Cuando te he puesto el anterior comentario lo acababa de probar con éxito en Ubuntu 7.10, ahora lo acabo de probar en Debian testing y en Ubuntu 6.06 y funciona en ambas distribuciones. El resultado de la ejecución ha sido:

joseluis@zenon:~$ sh prueba.sh prueba.sh
\n Los atributos son:
-rw-r--r-- 1 joseluis joseluis 554 2008-02-28 21:08 prueba.sh
\n Desea ver otro archivo? s/n \c
s
\n Nuevo fichero: \c
prueba.s
\n El fichero no existe!
\n Desea ver otro fichero? s/n \c
s
\n Nuevo fichero: \c
prueba.sh
\n Los atributos son:
-rw-r--r-- 1 joseluis joseluis 554 2008-02-28 21:08 prueba.sh
\n FIN DEL PROCESO
joseluis@zenon:~$

Tal vez tengas algún carácter extraño que esté fastidiando todo. Te aconsejo que abras el editor que quieras (por ejemplo el gvim) con un documento vacío y copies el código de mi comentario y lo pegues en el editor, lo guardes con otro nombre y pruebes a ejecutarlo (eso es lo que he hecho yo ahora y ha ido sin problemas).


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

+1
0
-1

Imagen de delmo
+1
0
-1

Lo he copiado tal y como me recomendabas en el gvim y al ejecutarlo me funciona perfectamente. Ademas los colores de la sintaxis en el gvim si cuadran, no como en el vim.

Entonces el problema lo tengo en el editor vim.. ¿suele ser normal esto? solo por curiosidad. Se puede reinstalar o instalar otra versión?

Muchisimas gracias!!!  

+1
0
-1
Imagen de joseluis
+1
0
-1

Realmente el gvim es un vim con interfaz gráfica, por lo demás es igual (o debería serlo). Si te comenté que lo hicieras en el gvim era porque a la hora de hacer el copy-paste podría ser en principio más sencillo. De todas formas si en un terminal gnome (o konsole o el que uses) creas con el vim otro fichero (vim prueba2.sh) y copias ahi el código ([ESC]i[Shift][CTRL]+V) seguro que funciona.

Yo creo que por algún motivo debías tener algún código extraño, invisible pero que le molestaba a la shell, e incluso al vim porque sino no tiene sentido que los colores te los mostrara mal.

Por cierto, acuérdate de editar el título de tu hilo y añádele un (solucionado) al final.


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

+1
0
-1

Imagen de joseluis
+1
0
-1

Supongo que será una errata pero acabo de ver que has puesto que lo ejecutas con sh prueba sh (parametro)
Realmente debería ser:

sh prueba.sh (parametro)

es decir falta un punto (.) entre prueba y el segundo sh, pero imagino que no será ese el problema y simplemente se trate de un error al escribirlo aquí.


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

+1
0
-1

Imagen de delmo
+1
0
-1

Ay! perdonad.. se me olvido poner el pundo en el comentario, pero si que lo pongo en la consola.. que misterio...

+1
0
-1