Script de creacion de usuarios. [Solucionado]
Hola gente, soy nuevo en foro (Posteando).
Directo al grano:
En mi clase de sistemas operativos, me han pedido que creara un script de creacion de usuario.
La consigna consiste en que el script tome los usuario de un archivo de texto, y les asignando una password. En caso de que el usuario ya exista, debo crearlos con una alternativa(Me explico mas abajo.)
El formato de archivo de texto es el siguiente
mariano:zunino:jeje
santiago:noble:jeje
.
.
.Los usuarios deberan crearse con el formato [PRIMERA LETRA DEL NOMBRE + APELLIDO], en el primer caso "mzunino" y si existe ese usuario, dar una alternativa como "mzunino1", "mzunino2", etc.
Ahora el problema es el siguiente, pueod hacer todo, expeto dar las alternativas, lo intente pero me sale error, o no entra al IF.
Para que vean de que hablo, aqui el scrip en cuestion:
#!/bin/bash
if [ -d "/var/log/CreacionUsuarios"]; then
clear
else
mkdir /var/log/CreacionUsuarios
fi
clear
echo -----------------
echo \| CREAR USUARIOS \|
echo -----------------
echo "Ingrese la ruta (COMPLETA) del archivo:"
read archivo
if [ -f "$archivo" ] ; then #se fija si $archivo es un archivo.
lineas=`cat "$archivo" | wc -l` #cuenta las lineas del archivo.
lineas=`echo $lineas | cut -d" " -f1` #se asegura que wc solo devuelva un numero.
lineas=$[lineas+1]
i=1
while [ $i -lt $lineas ] #mientras que I sea menor que Lineas, sigue:
do
linea=`head -$i "$archivo" | tail -1`
#Corta la primer letra del nombre.
nombre_usuario=`echo $linea | cut -c1`
#corta el apellido.
apellido_usuario=`echo $linea | cut -d: -f2`
#Concatena en apellido con la primer letra del nombre.
nuevo_usuario=${nombre_usuario}${apellido_usuario}
existe=`grep ^"$nuevo_usuario:" /etc/passwd`
if [ -z $existe ];then
useradd -c "$nombre_usuario $apellido_usuario" -m "$nuevo_usuario"
echo "$nuevo_usuario:$nuevo_usuario" | chpasswd
else
#Se redireccionan los usuarios no creados a el archivo log en la carpeta /var/log
echo "el usuario $nuevo_usuario ya EXISTE! `date +%D\ %r`" >> /var/log/CreacionUsuarios/creacionusuarios.log
echo "El usuario existe, desea que el script asgine un nombre automaticamente? [Y/n]"
read ok
#Si ok es igual a Y, entonces entra al while
if [ $ok == "Y" ];then
bandera=0
#Mientras bandera sea 0
<strong> while [ $bandera == '0' ]
do
var=1
asd=`grep ^"${nuevo_usuario}${var}:" /etc/passwd`
#Si la busqueda del usuario concatenada con la variable, no es encontrada crea al usuario y asigna
#un nuevo valor a la bandera para salir del while
if [ -z $asd ];then
useradd -c "${nombre_usuario}${var} ${apellido_usuario}${var}" -m "${nuevo_usuario}${var}"
echo "${nuevo_usuario}${var}:${nuevo_usuario}${var}" | chpasswd
echo "El nombre sera ${nuevo_usuario}${var}"
bandera=1
var=$[var+1]
fi</strong>
done
fi
fi
i=$[i+1]
done
echo "Para ver posibles errores, vea el archivo log en /var/log/CreacionUsuarios/creacionusuarios.log"
sleep 3
else
echo "Error, eso no es un archivo"
fi
- 1030 lecturas


Queria agregar el error:
línea 47: [: mzunino1:x:1002:1002:m1: se esperaba un operador binarioEsto es en caso de que mzunino exista, crea mzunino1, pero no puedo volver a ejecutar el script para que cree mzunino2, por ejemplo.
Ah otro detalle, ejecuten el script con bash Nombredelarchivo. Sino no funciona :S
El problema es que no es correcta la linea (hay mas errores)
[ $ok == "Y" ]Es para expresiones regulares es decir pregunta si Y esta contenida en $ok o al contrario no lo recuerdo, pero el valor que devuelve no es algo que pueda interpretar como falso con lo que la condicion siempre se cumple y entra (la explicación de esto puede no ser del todo cierta, hace tiempo que no toco bash
[ $ok = "Y" ]Lo correcto es esto anterior.
con este script tonto se puede probar
#!/bin/bashecho "Pulsa una tecla"
read ok
echo $ok
if [ $ok = "Y" ]; then
echo "funciona"
else
echo "no funciona"
fi
Gracias por la respuesta.
Igual ese no es el problema, si bien lo que dices es correcto, igual funciona. El problema es en el while:
while [ $bandera == '0' ]do
var=1
asd=`grep ^"${nuevo_usuario}${var}:" /etc/passwd`
if [ -z $asd ];then
useradd -c "${nombre_usuario}${var} ${apellido_usuario}${var}" -m "${nuevo_usuario}${var}"
echo "${nuevo_usuario}${var}:${nuevo_usuario}${var}" | chpasswd
echo "El nombre sera ${nuevo_usuario}${var}"
bandera=1
else
var=$[var+1]
fi
done
O sea, entra al while, hace el grep, busca el usuario alternativo, si no lo encunta deberia de crearlo y sumarle a bandera 1 para que salga del while, pero no lo hace. Y si lo encuntra deberia seguir en el while, pero sumando a la variable var, otro valor, para probar crearlo.
Si me puedes dar una ayuda te lo agradesco, este script debo entregarlo muy pronto.
Que si que el problema es que no puedes comparar correctamente con == debe ser como te lo digo y para mejor prueba el fragmento de ejemplo que te he puesto, ponlo con doble igual y con espacios y plantas una Y y cumple la condicion, hazme caso, el doble igual no es correcto, que hace exactamente con un ejemplo es decir buscas usuario patata, este existe y que hace el bucle según te funciona ahora.
Gracias denuevo por responder. Pues disculpame, no habia leido del todo bien tu ejemplo, creia haber visto otra vez == en tu ejemplo. A mi script cambiandole los "iguales" y otros detalles de unas variables ah quedado andando (habian unas variables mal ubicadas que hacian que entrara en un bucle infinito). Me encantaria postear mi script finalizado, pero no puedo por un simple motivo, si algun compañero de clase busca el script y lo utiliza, yo reprobaria porque se hizo copia. Les prometo que para la semana entrante, despues del viernes posteo el script, mientras tanto, coloco el post como solucionado. Gracias denuevo.
Me alegro que lo solucionaras, ya nos contarás la nota que te pusieron

Pido encaresidamente si pueden editar o eliminar el post por completo, ya que muchos compañeros han empezado a buscar el script por internet, y si dan con el codigo que eh posteado perderia el curso. Se los agradeceria mucho
Saludos.
Pd: h intentado enviar PM, pero me dice que no puedo enviarles.
Eso es, y que el hilo no le sirva a nadie, nada más que a ti
Haberlo pensado antes de poner aquí tus deberes de clase.
Estoy por poner ese hilo en portada, por aquello de facilitar su búsqueda...
Les respondo a los ultimos dos que respondieron. Al primero, nunca dije que la solucon fuera solo para mi, es mas eh dicho que publicaria el scripot finalizado cuando pueda. Asi que porfavor evita decir incoherencias.
Y al segundo, sin palabras. Supongo que las nomras del for dicen claramente: Hacer lo que uno quiera.
Pensar que los tenia como "mis salvadores de problemas" ya que siempre eh podido usars sus tips con mi debian. Pero cuando se queiren poner a la represiva lo hacen muy bien. Igual son de gran estima. Suertes.
Pd: perdon si suena muy agresivo, no es la intencion.