Syntax error: “(” unexpected (expecting “fi”) -- Como puede ser?

Iniciado por slyfx, 14 Marzo 2014, 02:43 AM

0 Miembros y 1 Visitante están viendo este tema.

slyfx


#!/bin/bash

archivousers="usuarios.csv"
IFS=$'\n'

if [! -f "$archivousers" ]
then
echo "No se ha encontrado el archivo $archivousers"
else
#Crearemos los usuarios mediante un array si se ha encontrado el archivo

grupos=(`cut -d, -f 3 "$archivousers" | sed 's/ //'`)
nombrecompleto=(`cut -d, -f 1 "$archivousers"`)
password=(`cut -d, -f 2 "$archivousers"`)
usuarios=(`cut -d, -f 1 "$archivousers" | tr [A-Z] [a-z] | awk '{print substr($1,1,1) $2}'`)

#Miramos si el grupo existe y si no lo creamos

for grupo in ${grupos[*]}
do
  grep -q "^$group" /etc/group ; let x=$?
  if [ $x -eq 1 ]
  then
    groupadd "$group"
  fi
done


#Creamos los usuarios y los añadimos al grupo con la pass catapumchimpun

x=0
creados=0
for  usuario in ${usuarios[*]}
do
  useradd -n -c ${nombrecompleto[$x]} -g "${grupos[$x]}" $usuario 2> /dev/null
  if [ $? -eq 0 ]
  then
    let creados=$creados +1
          fi

  #En esta parte crearemos la contraseña

  echo "${password[$x]}" | passwd --stdin "$usuario" > /dev/null

  #Como extra que avise por mail

  echo "Bienvenido! Tu cuenta ha sido creada, tu usuario es $usuario y tu contraseña temporal es \"$password\" sin las comillas" | mail -s "Nueva cuenta creada para $usuario" -b root $usuario

  x=$x+1

  echo -n "..."
  sleep .25
done
sleep .25
echo " "
echo "Completado! $creados cuentas han sido creadas y añadidas correctamente."
fi






He mirado de intentar que no se por el then el cual tenga que ir :
if [] ; then  por si no hacia bien el cerrado del if pero, no veo donde cae el error... alguna idea?

Gh057

(edito) hola slyfx perdón escribi una burrada, estaba con otro tema.

revisa por favor el primer if, no deberías agregarle paréntesis y negarla completa? el error entiendo que te tira en la línea 6.

(agrego) no son parentesis, te está faltando un espacio antes del !. no interpreta bien la sentencia. prueba si te funciona ahora, saludos
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

slyfx

Cita de: Gh057 en 14 Marzo 2014, 02:46 AM
(edito) hola slyfx perdón escribi una burrada, estaba con otro tema.

revisa por favor el primer if, no deberías agregarle paréntesis y negarla completa? el error entiendo que te tira en la línea 6.

----------------------
Hola Gh057, es lo que no entiendo porque me tira el error en la linea 12 es decir donde pone "grupos=(cut ...)", no entiendo porque deberia ser alli donde salta el unexpected
Gracias

Edito: ahora leo lo que pone e intento gracias de nuevo
-----------------------

Edito: Nada, sigue tirando el mismo error y en la misma linea, he puesto espacio como tu has dicho y igual, he probado de modificar la forma de hacer la creacion del array pero nada..
Gracias por tu colaboracion

Gh057

agregando un espacio en el primer if, no me tira errores de interpretación:


~/Codes$ nano error
~/Codes$ ./error
No se ha encontrado el archivo usuarios.csv
~/Codes$ nano usuarios.csv
~/Codes$ ./error

Completado! 0 cuentas han sido creadas y añadidas correctamente.
gh057@N37:~/Codes$


si hay algo que no funca bien... pero es lógico, no de sintaxis
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

Gh057

con respecto a usuarios.csv; como lo tienes grabado? no será problema del delimitador?

(agrego) entiendo que la opción d es el delimitador, por lo cual entiendo que si usas la coma deberías indicarla entre comillas; otro punto que veo porqué usas la opción --stdin? no es un parámetro válido de passwd:


Opciones:
  -a, --all
  -d, --delete
  -e, --expire
  -h, --help
  -k, --keep-tokens
  -i, --inactive INACTIVO
  -l, --lock
  -n, --mindays DÍAS_MIN
  -q, --quiet 
  -r, --repository REP
  -R, --root CHROOT_DIR
  -S, --status 
  -u, --unlock
  -w, --warndays DÍAS_AVISO
  -x, --maxdays DÍAS_MAX
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

slyfx

Cita de: Gh057 en 14 Marzo 2014, 03:37 AM
con respecto a usuarios.csv; como lo tienes grabado? no será problema del delimitador?

(agrego) entiendo que la opción d es el delimitador, por lo cual entiendo que si usas la coma deberías indicarla entre comillas; otro punto que veo porqué usas la opción --stdin? no es un parámetro válido de passwd:


Opciones:
 -a, --all
 -d, --delete
 -e, --expire
 -h, --help
 -k, --keep-tokens
 -i, --inactive INACTIVO
 -l, --lock
 -n, --mindays DÍAS_MIN
 -q, --quiet  
 -r, --repository REP
 -R, --root CHROOT_DIR
 -S, --status  
 -u, --unlock
 -w, --warndays DÍAS_AVISO
 -x, --maxdays DÍAS_MAX



Exacto, con lo del espacio tenias razon, pues no ejecutaba bien el script, con lo del delimitador si, tengo -d, ya que en el csv lo tengo grabado como:
pepito feo,pass1234,grupo
Con lo cual tendria que añadirse : pfeo (user) pepito feo (name, last name) y el grupo al que pertenece.

Lo de passwd --stdin pense que funcionaria pues vi en algun sitio que lo ponian ya que la opcion -p no la cogia bien es más en la linea de useradd intente ponerla de este modo:

useradd -n -c ${nombrecompleto[$x]} -g "${grupos[$x]}" -p "${password[$x]}" $usuario 2> /dev/null

y no lanza error pero no inserta.. muchas gracias por insistir !

Gh057

ok ya no tira errores? privilegios del archivo de lotes? recuerda que estás editando en /etc
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

slyfx

Si, tengo permisos en todas las carpetas, ahora estoy mirando de solucionar el tema de la password

Gh057

es que no te inserta el addusers porque estás intentando de insertar un nombre con espacios (nombre completo, pepito feo) deberías ahí insertar el usuario pfeo; por lo que te lleva recursivamente a revisar la variable usuario...

el comando cut lo delimitas por comas tanto para password, nombre completo como para grupos, sin embargo en usuarios debes tomar la primera letra, y la segunda cadena completa, que lo limita un espacio.

bueno espero que puedas solucionarlo mirando esos puntos, luego si sigues trabado postea nuevamente el código ya que ha variado bastante, sino vamos a marearnos todos  ;D
en algunas horas vuelvo jejeje saludos!
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

slyfx

Cita de: Gh057 en 14 Marzo 2014, 04:56 AM
es que no te inserta el addusers porque estás intentando de insertar un nombre con espacios (nombre completo, pepito feo) deberías ahí insertar el usuario pfeo; por lo que te lleva recursivamente a revisar la variable usuario...

el comando cut lo delimitas por comas tanto para password, nombre completo como para grupos, sin embargo en usuarios debes tomar la primera letra, y la segunda cadena completa, que lo limita un espacio.

bueno espero que puedas solucionarlo mirando esos puntos, luego si sigues trabado postea nuevamente el código ya que ha variado bastante, sino vamos a marearnos todos  ;D
en algunas horas vuelvo jejeje saludos!



Muchisimas gracias por tu ayuda, referente a lo del cut, he cambiado la coma por ":" a ver que tal pero sigue sin ir. Luego lo que dices de tomar la primera letra y la segunda cadena he realizado un "echo" del resultado tal y como lo tendría que insertar y me hace bien el hecho de coger la primera letra y la segunda cadena pero el problema es que no se inserta..
Por otra parte a nivel de passwd y lo cambié y lo puse en la linea de useradd como ya dije useradd -n -c ${nombrecompleto[$x]} -p ${password[$x]} -g "${grupos[$x]}" $usuario 2> /dev/null" con lo cual ya no está la linea de echo "${password[$x]}" | passwd --stdin "$usuario" > /dev/null

Te dejo el código tal y como esta ahora:


#!/bin/bash

archivousers="usuarios.csv"
IFS=$'\n'

if [ ! -f "$archivousers" ]
then
echo "No se ha encontrado el archivo $archivousers"
else
#Crearemos los usuarios mediante un array si se ha encontrado el archivo
grupos=(`cut -d: -f 3 "$archivousers" | sed 's/ //'`)
nombrecompleto=(`cut -d: -f 1 "$archivousers"`)
password=(`cut -d: -f 2 "$archivousers"`)
usuarios=(`cut -d: -f 1 "$archivousers" | tr [A-Z] [a-z] | awk '{print substr($1,1,1) $2}'`)
#Miramos si el grupo existe y si no lo creamos
for grupo in ${grupos[*]}
do
  grep -q "^$group" /etc/group ; let x=$?
  if [ $x -eq 1 ]
  then
    groupadd "$group"
  fi
done
#Creamos los usuarios y los añadimos al grupo con la pass
x=0
creados=0
for  usuario in ${usuarios[*]}
do
  echo "Name: ${nombrecompleto[$x]}, Usuario: $usuarios, pw: ${password[$x]}"
  useradd -n -c ${nombrecompleto[$x]} -p ${password[$x]} -g "${grupos[$x]}" $usuario 2> /dev/null
  if [ $? -eq 0 ]
  then
    let creados=$creados +1
          fi
  x=$x+1
  echo -n "..."
  sleep .25
done
sleep .25
echo " "
echo "Completado! $creados cuentas han sido creadas y añadidas correctamente."
fi




mi csv usuarios.csves el siguiente:



Pepito Feo:12345633:156-456-3322:995 Bluto Street, Anywhere, USA 29358:3/19/1992:Accounts:22350
Jennifer Guapa:68451695:326-658-1162:583 Laurel Ave., Pensilvania, TX 65812:1/02/1996:Computer:59655



De nuevo, muchas gracias! sigo buscando a ver que puede ser. Saludos!  :D