Se ve mejor aquí
#!/bin/bash
#
#..Script para crear usuarios a pedal..
#......Autor: Ángel T. Domínguez......
#..Funcionamiento: Se pretende crear un script que
#.tome como parámetros una lista de nombres de
#.usuarios; y proceda a introducirlos en el fichero
#./etc/passwd debidamente formateados
#
#Voy a usaralguna variable para que quede más chulo
#
FALLIDOS="Usuarios fallidos: "
CREADOS="Usuarios creados: "
#
#..Hagamos alguna función...
#
#La función ayuda va a ser simple:
#será llamada cuando se use mal el script,
#bien por falta de parámetros o por no ser root
#Muestra unos mensajitos y finaliza devolviendo
#un código de error (1) en este caso.
#
ayuda(){
clear
echo 'Scripts para crear usuarios, forma de uso:'
echo
echo "$0 Usuario[s]"
echo -e "nRecuerde que debe pasar al menos un usuario como parámetro."
echo -n "Y que usted debe ser "
echo 'root'
echo
echo 'Inténtelo de nuevo'
return 1
}
#
#La función nummasmas obtiene el número más alto de
#un rango, y devuelve el número más uno.
#
nummasmas(){
VALOR=`more $1 | cut -d: -f$2 | sort -n | tail -1`
VALOR=`expr $VALOR + 1`
return 0
}
#En primer lugar compruebo que se han pasado parámetros
#y, de no ser así, muestro la ayuda y finalizo.
#
if [ $# -eq 0 ]
then
ayuda
fi
#
#Compruebo que el usuario es root y, si no lo es,
#muestro la ayuda y finalizo.
#
if [ $USER != "root" ]
then
ayuda
fi
#
#La comprobación anterior puede realizarse
#también por medio de los permisos en /etc/passwd,
#porque dicho fichero debe existir y quién ejecute
#el script tiene que tener permisos de escritura
#
#Este if y el anterior hacen lo mismo.
#
if ! [ -w /etc/passwd ]
then
ayuda
fi
#
#En este momento sé que han pasado al menos un
#parámetro; y que quién ejecuta el script es
#root (y tiene permisos de escritura en passwd.
#
#Comenzaré un bucle que iterará tantas veces como
#parámetros se hayan introducido:
#
for USUARIO in $*
do
#
# Lo primero será comprobar que el nombre de
# usuario pasado no está en uso. Para ello
# lo busco en el primer campo de /etc/passwd
# Si ya existe lo indico, actualizo la variable
# FALLIDOS y paso al siguiente usuario (iteración.)
#
CADENA=`more etc/passwd | grep "^${USUARIO}:" | cut -d":" -f1`
if [ "${CADENA}" == "${USUARIO}" ]
then
echo "$USUARIO ya existe en el sistema, será ignorado"
FALLIDOS="${FALLIDOS}${USUARIO} "
sleep 2
continue
fi
#
# Si el usuario no existe obtengo los datos
# necesarios para construir una línea para
# añadirla al fichero /etc/passwd.
# En primer lugar el UID, que no debe repetirse.
#
nummasmas /etc/passwd 3
IDU=$VALOR
#
# En $IDU ya está el UID disponible gracias a la
# función nummasmas. Ahora vamos a por el GID, para
# lo cual preguntaremos al usuario por el grupo
# al que va a pertenecer cada usuario. Como le puede
# resultar tedioso, le damos la opción a que meta
# en el mismo grupo a todos los usuarios. Eso sí,
# sólo le vamos a permitir que indique nombres de grupo
# que ya existen en el sistema.
#
# Primero compruebo que no haya fijado un grupo por defecto
#
if [ "${OPC}" != "s" ] && [ "${OPC}" != "S" ]
then
while [ -z $FLAG ]
do
clear
read -p "Indique el grupo al que quiere que pertenezca $USUARIO: " GRUPO
FLAG=`more /etc/group | grep ^${GRUPO}: | cut -d":" -f3`
if [ -z $FLAG ]
then
echo -e "nDebe introducir un grupo existente; y $GRUPO no lo és."
sleep 2
fi
done
IDG=$FLAG
FLAG=""
echo "$USUARIO va a formar parte del grupo $GRUPO."
echo "¿Desea fijar $GRUPO como grupo por defecto para el resto de usuarios? "
echo "Si pulsa "N" se le volverá a preguntar por el grupo."
read -sn 1 -p "S/N " OPC
clear
fi
#
# Al salir del bucle sé que en $GRUPO hay un grupo
# que existe; y, además, tengo en $IDG el GID de dicho grupo
#
# Ahora pediremos el nombre y apellido del usuario para
# el campo comentarios de /etc/passwd. De igual forma
# que con el grupo, daremos la opción de que tome el nombre
# de usuario como valor para este campo, lo deje en blanco,
# o le pida los datos cada vez.
#
if [ "${OPC2}" != "1" ] && [ "${OPC2}" != "2" ]
then
clear
echo "Ahora podrá incluir el nombre y apellido de $USUARIO"
echo "en el campo comentario de /etc/passwd; o, si lo prefiere,"
echo "pulse 1 y todos los usuarios tendrán su nombre de usuario en "
echo "este campo. Si pulsa 2 dejara el campo en blanco para todos."
echo 'Pulsando culquier otra tecla se le pedirá el nombre y apellido'
read -sn 1 -p "Pulse cualquier tecla, 1 o 2: " OPC2
if [ "${OPC2}" != "1" ] && [ "${OPC2}" != "2" ]
then
echo -e "nIndique ahora el nombre y apellido de $USUARIO"
read COMENTARIO
fi
fi
case $OPC2 in
"1" )
COMENTARIO=$USUARIO;;
"2" )
COMENTARIO="";;
esac
#
# Le toca el turno al directorio home del usuario. Primero lo
# crearé y, si todo ha ido bien, añadire su ruta a la variable
# correspondiente.
#
mkdir -p /home/$USUARIO
cp -Raf /etc/skel/* /home/${USUARIO}/
if ! [ -d /home/$USUARIO/Documents ]
then
clear
echo "Se produjo un error al crear el directorio home de $USUARIO"
echo "Abortando la creación del usuario $USUARIO"
FALLIDOS="${FALLIDOS}${USUARIO} "
sleep 2
continue
fi
CASA="/home/${USUARIO}"
#
# Ya sólo queda construir de forma correcta la línea del nuevo
# usuario e inyectarla en /etc/passwd
#
echo "${USUARIO}:x:${IDU}:${IDG}:${COMENTARIO}:${CASA}:/bin/bash" >> /home/hippie/Desktop/scripts/etc/passwd
#
# Ahora ya existe el usuario. Sólo resta cambiar el propietario de
# su directorio home (que lo ha creado root) al nuevo usuario.
#
chown -R ${USUARIO}:${GRUPO} /home/$USUARIO
#
# Fin del bucle que se repetirá tantas veces como usuarios se hayan
# pasado como parámetros.
#
CREADOS="${CREADOS}${USUARIO} "
done
#
#Muestro un resumen final
#
clear
echo "se han procesado todos los usuarios;"
echo "se muestra el resumen de resultados:"
echo $CREADOS
echo $FALLIDOS
read -sn 1 -p "pulse culquier tecla para finalizar" BASURA
clear