Problema Script Bash

Frezz

Estoy teniendo un problema para compilar un script para un trabajo, que no sé qué hacer, no suelo usar linux y seguro que tiene además más errores, pero este, aunque será una tontería no veo dónde está el error sintáctico, estoy embotado entre mysql, java, xquery y ahora esto XD

El error al que me refiero está en esta línea me dice el shell, está dentro de un case:

     5) if [ "$EUID" -eq 0 ] ; then 
		correcto=1
		while [ $correcto -eq 1 ] ; do	
			echo -e "Introduzca el nombre de usuarion"
			read -s nombre_usuario
			echo -e "Introduzca la contraeñan"
			read -s contrasena
			echo -e "Vuelva a introducir contraseñan"
			read -s contrasena2
			if [ $contrasena -eq $contrasena2 ]  ; then 
				if [ ! getent passwd $nombre_usuario > /dev/null 2>&1 ] ; then
				useradd  -m -d /home/$nombre_usuario -p $contrasena $nombre_usuario
				$correcto++
				else echo -e "nERROR: El usuario ya existe..." fi
			else echo -e "nERROR: La contraseña no coincide..." fi
		done
	else echo -e "nERROR: No estás registrado como administrador... "
	fi ;;
     6) if [ "$EUID" -eq 0 ] ; then 

Este es el error:

./menu: línea 49: error sintáctico cerca del elemento inesperado `else'
./menu: línea 49: `			else echo -e "nERROR: La contraseña no coincide..." fi ;'

A ver si alguien lo ve así al vuelo o algo y puede ayudarme, al final dejo el código entero (aún no lo probé todo pero es que no avanzo de este problema) y si eso el enunciado:

ENUNCIADO:

spoiler
spoiler
jalamoNNN

Creo que $variable++ en bash no funciona. De hecho $variable creo que sólo sirve para leer una variable, no para modificarla.
Prueba a evaluar una expresión aritmética (en la línea 47):
correcto=$((correcto+1))
Así a simple vista no se me ocurre que sea otra cosa.

2 respuestas
W

#2 Diría que sí que funciona pero con el let.

let variable++

3 respuestas
jalamoNNN

#3 ahí me pillas, nunca he usado let

Leos

#3 Seguro que lo admite? Yo las variables++ siempre las hago como 2 y nunca he visto un let en bash aunque tampoco se demasiado.

1 respuesta
W

#5 http://www.linux-es.org/node/147

Creo haber usado sin problemas el let variable++ pero también se puede usar let variable=$variable+1

1
Frezz

#2 #3 Garcias por responder, eso ha sido una prueba de última hora cambiando cosas, de normal lo tenía como correcto=1, pero hay muchas maneras de hacer eso, y con todas sigue dando el mismo error, me puse con otros ejercicios y más tarde volveré a ese.

http://tldp.org/LDP/abs/html/dblparens.html

Aunque lo mismo funciona debería usar doble paréntesis, aunque lo dejaré como estaba que nunca me falla, pero igual esa línea no da error sintáctico (aunque me sumara algo raro).
corracto=0 o var=$((var+1)) o let "var=var+1", el ++ creo que con let debería ir entre comillas dobles: let "var++" ahora que lo he leído mejor.

pd: He estado probando a quitar los if y dejarlos todos en uno con 3 test con && y a comentar cada rato una cosa y siempre entre la línea 45 y la 52 me aparece el mismo error, no se esperada o el else, o el done, o unas comillas";" o cualquier otra historia... XD

1 respuesta
jalamoNNN

#7 después de los echo deberías de poner un punto y coma antes del fi o meter un salto de línea

1 respuesta
Frezz

Bueno después de rallarme hoy y leer bastante, al final era tema de los espacios en blanco sueltos, después y antes de algunos fi, else, then, había espacios en blanco sueltos, he revisado de arriba abajo el código y los he borrado, y todo funcionando correctamente, eso sí luego ya lo he modificado para que funcione bien cada opción, gracias por la ayuda.

#8 También probé con lo que decías pero al final eso se lo pasa por alto y los jodidos espacios no XD

Usuarios habituales

  • Frezz
  • jalamoNNN
  • w4nx1
  • Leos